22.09.2020

Выпуск СУБД Redis 6.0


Подготовлен релиз СУБД Redis 6.0, относящейся к классу NoSQL-систем. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. Код проекта поставляется под лицензией BSD. Дополнительные модули, в которых предлагаются расширенные возможности для корпоративных пользователей, такие как RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, с прошлого года поставляются под проприетарной лицензией RSAL. Развитие открытых вариантов данных модулей под лицензией AGPLv3 продолжено проектом GoodFORM.

В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl. Redis поддерживает транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти.

Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями «публикация/подписка», при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.

Ключевые улучшения, добавленные в Redis 6.0:

  • По умолчанию предложен новый протокол RESP3, но установка соединения начинается в режиме RESP2 и клиент переключается на новый протокол только если при согласовании соединения использована новая команда HELLO. RESP3 позволяет напрямую возвращать сложные типы данных без необходимости конвертации общих массивов на стороне клиента и разделяя возвращаемые типы.
  • Поддержка списков контроля доступа (ACL), позволяющих точно определить какие операции можно выполнять клиенту, а какие нет. ACL также дают возможность защититься от возможных ошибок при разработке, например, обработчику, который выполняет только операцию BRPOPLPUSH, можно запретить выполнение других операций, и в случае, если в рабочем коде будет случайно забыт добавленный при отладке вызов FLUSHALL, это не приведёт к проблемам. Реализация ACL не сопряжена с дополнительными накладными расходами и практически не влияет на производительность. Для ACL также подготовлены интерфейсные модули, дающие возможность создавать собственные методы аутентификации. Для просмотра всех зафиксированных нарушений ACL предусмотрена команда «ACL LOG». Для генерации непредсказуемых сессионных ключей добавлена команда «ACL GENPASS», использующая HMAC на основе SHA256.
  • Поддержка SSL/TLS для шифрования канала связи между клиентом и сервером.
  • Поддержка кэширования данных на стороне клиента. Для согласования кэша на стороне клиента с состоянием БД доступно два режима: 1. Запоминание на сервере ключей, которые ранее запрашивал клиент, чтобы информировать его о потере актуальности записи в клиентском кэше. 2. Механизм «broadcasting», при котором клиент подписывается на определённые префиксы ключей и сервер уведомляет его в случае изменения ключей, подпадающих под эти префиксы. Плюс режима «broadcasting» в том, что на сервере не тратится дополнительная память на хранение карты прокэшированных на стороне клиента значений, а минус в увеличении числа передаваемых сообщений.
  • Брокер сообщений Disque, позволяющий использовать Redis для обработки очередей сообщений, вынесен из базового состава в отдельный модуль.
  • Добавлен Cluster Proxy, прокси для кластера серверов Redis, позволяющий организовать работу клиента с несколькими серверами Redis, как с одним экземпляром. Прокси может маршрутизировать запросы к узлам с необходимыми данными, мультиплексировать соединения, переконфигуририровать кластер в случае выявления сбоев узлов, выполнять запросы, охватывающие несколько узлов.
  • Значительно улучшен API для написания модулей, по сути превративший Redis во фреймворк, позволяющий создавать системы в форме модулей-надстроек.
  • Реализован режим репликации, при котором файлы RDB сразу удаляются после того как были использованы.
  • Улучшен протокол репликации PSYNC2, что дало возможность чаще выполнять частичную ресинхронизацию, за счёт повышения шансов выявления смещения, общего для реплики и мастера.
  • Ускорена загрузка файлов RDB. В зависимостт от начинки файла ускорение составляет от 20 до 30%. Значительно ускорено выполнение комадны INFO при наличии большого числа подключённых клиентов.
  • Добавлена новая команда STRALGO с реализацией сложных алгоритмов обработки строк. В настоящий момент доступен только один алгоритм LCS (longest common subsequence), который может быть полезен при сравнении последовательностей РНК и ДНК.

Источник: https://www.opennet.ru/opennews/art.shtml?num=52848

Добавить комментарий