Опубликован релиз СУБД 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%.
[](https://cdn.sanity.io/images/sy1jschh/production/414d2351fc68b4e7f24fd24d2bd478e0af4b8eef-1530x954.png?w=1920&q=80&fit=clip&auto=format)
- Проведены оптимизации кода обработки одновременных операций и многопоточного ввода/вывода, позволившие на 49% увеличить число обрабатываемых операций в секунду в тестах c 8 потоками ввода/вывода при распределении нагрузки в 20% запросов на запись и 80% на чтение. На одном сервере удалось превысить рубеж в 1 миллион обрабатываемых операций в секунду.
[](https://cdn.sanity.io/images/sy1jschh/production/a6e4d5b78377a7157577097fee909333750e963d-1600x995.png?w=1920&q=80&fit=clip&auto=format)
- Фундаментально изменён метод хранения данных в формате ключ/значение - для хранения теперь используется унифицированная структура kvobj, позволяющая упаковывать имя ключа, короткое значение и время жизни в одном блоке выделяемой памяти и обойтись одной ссылкой на эту структуру в хэш таблицах, вместо отдельных ссылок на ключи, данные и TTL. При хранении коротких строковых значений новый метод хранение позволил сократить потребление памяти на 25-37%.
[](https://cdn.sanity.io/images/sy1jschh/production/3d788e41b23117f8a4a2b26d2fb813dc2d8f8e71-1033x427.jpg?w=1920&q=80&fit=clip&auto=format)
- Проведена оптимизация хранения данных в формате JSON, позволившая снизить потребление памяти на 25-67% при хранении целых чисел и чисел с плавающей запятой.
- В механизм Streams, применяемый для обработки и хранения потока сообщений, добавлены новые команды XACKDEL и XDELEX, упрощающие работу с потоками, к которым подключено несколько получателей (consumer groups). Команды решают задачу удаления сообщения только после того, как его получение будет подтверждено всеми обработчиками.
- В команду BITOP, предназначенную для выполнение битовых операций, добавлены новые логические операторы DIFF, DIFF1, ANDOR и ONE.
- Добавлен новый тип индексов векторов SVS-VAMANA, поддерживающий сжатие векторов.
- Добавлены новые метрики: нагрузка в разрезе отдельных слотов и распределение размеров ключей для базовых типов данных.
Источник: https://www.opennet.ru/opennews/art.shtml?num=63709