Κυκλοφορία του Redis 7.0 DBMS

Опубликован релиз СУБД Redis 7.0, относящейся к классу NoSQL-систем. Redis предоставляет функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. Код проекта поставляется под лицензией BSD. Дополнительные модули, в которых предлагаются расширенные возможности для корпоративных пользователей, такие как RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, с 2019 года поставляются под проприетарной лицензией 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-скриптов.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο