Випуск СУБД Redis 7.0

Опубліковано реліз СУБД 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

Додати коментар або відгук