Опубликован релиз СУБД Redis 8.2, относящейся к классу NoSQL-систем. Redis предоставляет функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. Код проекта написан на язык Си и распространяется под лицензией AGPLv3.
СУБД Redis поддерживает транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl.
Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями “публикация/подписка”, при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
Ключевые изменения в Redis 8.2:
- Проведена оптимизация более 70 команд, которые стали работать быстрее, чем в Redis 8.0. Например, команда BITCOUNT стала быстрее на 35%, а команды для операции со списками LINSERT, LREM и LPOS – быстрее на 25%. 17 из оптимизированных команд стали быстрее минимум на 5%, а 52 – минимум на 2%.
- Проведены оптимизации кода обработки одновременных операций и многопоточного ввода/вывода, позволившие на 49% увеличить число обрабатываемых операций в секунду в тестах c 8 потоками ввода/вывода при распределении нагрузки в 20% запросов на запись и 80% на чтение. На одном сервере удалось превысить рубеж в 1 миллион обрабатываемых операций в секунду.
- Фундаментально изменён метод хранения данных в формате ключ/значение – для хранения теперь используется унифицированная структура
kvobj, позволяющая упаковывать имя ключа, короткое значение и время жизни в одном блоке выделяемой памяти и обойтись одной ссылкой на эту структуру в хэш таблицах, вместо отдельных ссылок на ключи, данные и TTL. При хранении коротких строковых значений новый метод хранение позволил сократить потребление памяти на 25-37%. - Проведена оптимизация хранения данных в формате JSON, позволившая снизить потребление памяти на 25-67% при хранении целых чисел и чисел с плавающей запятой.
- В механизм Streams, применяемый для обработки и хранения потока сообщений, добавлены новые команды XACKDEL и XDELEX, упрощающие работу с потоками, к которым подключено несколько получателей (consumer groups). Команды решают задачу удаления сообщения только после того, как его получение будет подтверждено всеми обработчиками.
- В команду BITOP, предназначенную для выполнение битовых операций, добавлены новые логические операторы DIFF, DIFF1, ANDOR и ONE.
- Добавлен новый тип индексов векторов SVS-VAMANA, поддерживающий сжатие векторов.
- Добавлены новые метрики: нагрузка в разрезе отдельных слотов и распределение размеров ключей для базовых типов данных.