Выпуск СУБД Redis 7.0
Опубликован релиз СУБД Redis 7.0, относящейся к классу NoSQL-систем. Redis предоставляет функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. Код проекта поставляется под лицензией BSD. Дополнительные модули, в которых предлагаются расширенные возможности для корпоративных пользователей, такие как RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, с прошлого года поставляются под проприетарной лицензией RSAL. Развитие открытых вариантов данных модулей под лицензией AGPLv3 пытался продолжить проект GoodFORM, который последнее время находится в стагнации.
В отличие от систем хранения в оперативной памяти, таких как Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl. Redis поддерживает транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти.
Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями «публикация/подписка», при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
Ключевые изменения в Redis 7.0:
Добавлена поддержка функций, выполняемых на стороне сервера. В отличие от ранее поддерживаемых скриптов на языке Lua, функции не привязаны к приложению и нацелены реализацию дополнительной логики, расширяющей возможности сервера. Функции обрабатываются неразрывно с данными и в привязке к БД, а не к приложению, в том числе реплицируются и сохраняются в постоянном хранилище.
Предложена вторая редакция ACL, позволяющая управлять доступом к данным на основе ключей и допускающая определение разных наборов правил доступа к командам с возможностью привязки нескольких селекторов к каждому пользователю. Каждый ключ может быть отождествлён с определённым полномочиями, например, можно ограничить доступ только чтением или записью определённого подмножества ключей.
Предоставлена работающая в кластере секционированная (sharded) реализация парадигмы распространения сообщений по подписке (Publish-Subscribe), при которой сообщение отправляется определённому узлу, к которому привязан канал сообщений, после чего это сообщение перенаправляется остальным узлам, входящим в секцию (shard). Клиенты могут получать сообщения по подписке на канал, как подключаясь к основному узлу, так и ко вторичным узлам секции. Управление производится при помощи команд SSUBSCRIBE, SUNSUBSCRIBE и SPUBLISH.
- Добавлена поддержка обработки подкоманд в большинстве контекстов.
- Добавлены новые команды:
- ZMPOP, BZMPOP.
- LMPOP, BLMPOP.
- SINTERCARD, ZINTERCARD.
- SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
- EXPIRETIME, PEXPIRETIME .
- EVAL_RO, EVALSHA_RO, SORT_RO.
FUNCTION *, FCALL, FCALL_RO.
- COMMAND DOCS, COMMAND LIST.
- LATENCY HISTOGRAM.
- CLUSTER SHARDS, CLUSTER LINKS, CLUSTER DELSLOTSRANGE, CLUSTER ADDSLOTSRANGE.
- CLIENT NO-EVICT.
ACL DRYRUN.
- Предоставлена возможность обработки сразу нескольких конфигураций в одном вызове CONFIG SET/GET.
В утилиту redis-cli добавлены опции »--json»,»-2»,»--scan»,»--functions-rdb».
По умолчанию отключён доступ клиентам к настройкам и командам, влияющим на безопасность (например, отключены команды DEBUG и MODULE, запрещено изменение конфигураций с флагом PROTECTED_CONFIG). В redis-cli прекращён вывод в файл с историей команд, содержащих конфиденциальные данные.
Внесена большая порция оптимизаций, нацеленных на повышение производительности и снижение потребления памяти. Например, существенно снижено потребление памяти при включении режима кластера, при выполнении операций copy-on-write и при работе с хэшами и ключами zset. Улучшена логика сброса данных на диск (вызова fsync). Сокращено число сетевых пакетов и обращений к системным вызовам при отправке ответов клиенту. Повышена эффективность репликации.
Устранена уязвимость CVE-2022–24735 в окружении для исполнения Lua-скриптов, позволяющая осуществить подстановку своего Lua-кода и добиться его выполнения в контексте другого пользователя, в том числе имеющего более высокие привилегии.
Устранена уязвимость CVE-2022–24736, позволяющая добиться аварийного завершения процесса redis-server из-за разыменования нулевого указателя. Атака совершается через загрузку специально оформленных Lua-скриптов.
Источник: http://www.opennet.ru/opennews/art.shtml? num=57100
© OpenNet