Опубликован Valkey 9.0, форк СУБД Redis

Состоялся релиз СУБД Valkey 9.0, в прошлом году ответвившейся от СУБД Redis. Форк был образован после перевода Redis 7.4 на проприетарную лицензию. В выпуске Redis 8.0 код был возвращён на свободную лицензию AGPLv3, но это не повлияло на разработку проекта Valkey. Valkey развивается на нейтральной площадке под покровительством организации Linux Foundation при участии разработчиков из таких компаний, как Amazon, Google, Oracle, Ericsson и Snap. Код проекта написан на языке Си и распространяется под лицензией BSD. Поддерживается работа в Linux, macOS, OpenBSD, NetBSD и FreeBSD.

СУБД Valkey и Redis предоставляют функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. БД хранится в памяти и синхронизируется с версией на диске или отражается в логе изменений на диске, что гарантирует сохранность данных в случае аварийного завершения работы. Поддерживаются транзакции, режим “публикация/подписка”, команды для инкремента/декремента, операции над списками и множествами (объединение, пересечение), переименование ключей, master-slave репликация, множественные выборки и функции сортировки.

В новой версии:

  • Для переноса данных между узлами в кластере задействована техника атомарной миграции слотов, при которой данные переносятся не на уровне отдельных ключей (один ключ за другим), а на уровне атомарного перемещения 16384 байтовых слотов хранения данных. Перенос осуществляется с использованием формата AOF, позволяющего отправлять отдельные элементы коллекций вместо всех данных, связанных с ключом. Подобный подход заметно повышает производительность, позволяет избежать перенаправлений и исключает задержки, возникавшие при доступе клиента к переносимому ключу.
  • Добавлена возможность определения отдельного времени жизни для разных полей в хэшах, связанных с одним ключом (ранее время жизни привязывалось к ключу и охватывало разом все поля). Для управления временем жизни данных добавлены новые команды: HEXPIRE,HEXPIREAT,HEXPIRETIME,HGETEX,HPERSIST,HPEXPIRE,HPEXPIREAT,HPEXPIRETIME,HPTTL,HSETEX и HTTL.
  • Предоставлена возможность использования в кластерном режиме нумерованных БД, в которых пространство ключей разделяется на несколько разных БД (по умолчанию 16).
  • Повышена эффективность работы больших кластеров – продемонстрирован кластер из 2000 узлов, способный обрабатывать миллиард запросов в секунду.
  • Добавлена оптимизация, позволяющая в некоторых ситуациях на 40% повысить пропускную способность за счёт упреждающей загрузки группируемых (pipelining) команд в память.
  • Добавлена оптимизация, позволяющая в некоторых ситуациях на 20% повысить пропускную способность за счёт исключения копирования данных в памяти (zero copy) во время обработки крупных запросов.
  • Добавлена поддержка технологии Multipath TCP для организации доставки пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. Применение Multipath TCP позволяет в некоторых ситуациях снизить задержки на 25%.
  • В BITCOUNT и HyperLogLog добавлены оптимизации, использующие процессорные инструкции SIMD, в некоторых ситуациях позволяющие увеличить пропускную способность на 200%.
  • В геопространственные индексы добавлена поддержка запросов местоположения по координатам многоугольника.
  • Добавлена команда “DELIFEQ” для удаления ключа, если связанное с ним значение соответствует указанному.
  • В команде “CLIENT LISTреализована возможность задания фильтров, отсеивающих элементы по имени, флагам, активности, БД, IP-адресу и полномочиям.
  • Возобновлена поддержка 25 команд, ранее объявленных устаревшими.
Release. Ссылка here.