Выпуск СУБД Redis 6.0
30 апреля 2020 года
Подготовлен релиз СУБД Redis 6.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 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), который может быть полезен при сравнении последовательностей РНК и ДНК.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.