Новости Минус 90% памяти и гибридный поиск. Главные фишки новой версии Redis 8.4

NewsMaker

I'm just a script
Премиум
22,447
46
8 Ноя 2022
В Redis 8.4 наконец-то починили миграцию слотов в кластерах.


lbgffr8t1xecyy1um8z1nrtkpixj9keh.jpg

25 ноября 2025 года представлена версия СУБД Redis 8.4. Redis относится к классу NoSQL систем и используется как хранилище типа ключ/значение с поддержкой структурированных форматов данных, включая списки, хэши, множества и упорядоченные множества. Система позволяет выполнять серверные скрипты на языке Lua, работает преимущественно в оперативной памяти и распространяется с открытым исходным кодом под лицензией AGPLv3.

Redis предоставляет транзакционный режим выполнения команд, при котором набор операций обрабатывается как единое целое, без вмешательства других запросов, с возможностью отката изменений при ошибке. Доступны клиентские библиотеки для большинства распространенных языков программирования, а для работы с данными реализован набор стандартных операций, таких как инкремент и декремент числовых значений, операции над коллекциями и множественные выборки. Для долговременного хранения используются два подхода - периодическое создание снимков данных и ведение журнала изменений, возможна репликация по схеме master-slave и обмен сообщениями по модели публикация/подписка.

Redis 8.4 доступен через Docker Hub (образы на базе Alpine и Debian), а также через Snap, Homebrew, RPM и APT репозитории.

В версии 8.4 реализован гибридный поиск, сочетающий полнотекстовый и векторный подходы. Для этого добавлена команда FT.HYBRID, которая в рамках одного запроса объединяет результаты полнотекстового поиска и поиска по векторному сходству и возвращает общий ранжированный список. Поддерживается слияние оценок разными методами, включая Reciprocal Rank Fusion и Linear Combination. Запросы могут одновременно учитывать буквальное совпадение текста, семантическую близость, давность данных и географические ограничения с использованием GEO и GEOSHAPE фильтров.

По данным разработчиков, для типичного сценария работы в роли кеша с преобладанием операций GET над SET пропускная способность Redis 8.4 примерно на треть выше, чем у версии 8.2. Для поисковых и агрегирующих операций переработана обработка ввода и вывода в кластере. При выполнении распределенных запросов ответы от нескольких шардов обрабатываются параллельно, а не через один поток, что уменьшает задержки и позволяет лучше использовать вычислительные ресурсы. Это касается команд FT.SEARCH, FT.AGGREGATE и нового гибридного запроса.

Существенная часть изменений касается работы с типом JSON. Для коротких строк длиной до семи байт используется встраиваемое хранение, что в типичных тестовых массивах с ключами и значениями небольшой длины сокращает расход памяти примерно на треть. Для крупных однородных числовых массивов тип элемента больше не хранится отдельно для каждой записи: он задается один раз на уровне массива, а сам движок подбирает наиболее компактный подходящий формат - целочисленный или вещественный, включая BF16, FP16, FP32 и FP64. В массивах из порядка миллиона чисел это дает сокращение объема памяти от примерно 50 до более чем 90 процентов в зависимости от диапазона значений и выбранного представления.

Обновлена и модель работы с потоками Redis Streams. В ней используется понятие pending сообщений, которые были доставлены участнику consumer group, но еще не подтверждены. Если такие сообщения долго остаются без подтверждения, их нужно повторно забирать и обрабатывать. Ранее клиентам приходилось отдельно следить за списком неподтвержденных записей и параллельно обрабатывать новые сообщения. В Redis 8.4 в команду XREADGROUP добавлено расширение, которое позволяет в одном запросе одновременно получать новые записи и забирать idle pending сообщения, что упрощает реализацию устойчивых потребителей и сценариев восстановления после сбоев.

В ядро добавлены атомарные операции, которые ранее обычно реализовывались через Lua скрипты. Команда SET получила новые опции IFEQ, IFNE, IFDEQ и IFDNE, которые позволяют обновлять строковый ключ только при выполнении заданного условия относительно текущего значения. Это позволяет реализовать схему compare-and-set для одиночных ключей без дополнительных скриптов. Для сценариев сравнения и удаления введена команда XDELEX, которая атомарно удаляет строковый ключ, если его значение не изменилось с момента чтения.

Для обновления нескольких строковых ключей добавлена команда MSETEX. Она позволяет в одной операции установить значения для набора ключей, задать для них общее время жизни и при необходимости ограничить выполнение условиями, например "все указанные ключи уже существуют" или "ни один из указанных ключей не существует". Это упрощает типичные сценарии и уменьшает необходимость в пользовательских скриптах.

Для кластерных развертываний переработан механизм миграции слотов. В предыдущих версиях переназначение слотов между узлами осуществлялось по отдельным ключам, что приводило к промежуточным состояниям, когда часть ключей уже перенесена, а часть еще остается на исходном узле. Клиенты в этот период получали перенаправления и ответы TRYAGAIN, что усложняло работу с пайплайнами и многоключевыми операциями и создавало риск неочевидных ошибок при сбоях. В Redis 8.4 реализована атомарная миграция слотов. Содержимое слота и журнал текущих изменений сначала копируются на целевой узел, после чего выполняется единая передача владения слотом. На время копирования клиенты продолжают работать с исходным узлом, что снижает вероятность ошибок в процессе миграции и уменьшает операционные риски при перераспределении нагрузки в кластере.
 
Источник новости
www.securitylab.ru

Похожие темы