Подготовлен (https://groups.google.com/forum/#!topic/redis-db/l0OXDAlwosU) релиз СУБД Redis 5.0 (http://redis.io/), относящейся к классу NoSQL-систем. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. Код проекта поставляется (https://github.com/antirez/redis) под лицензией BSD.
В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl. Redis поддерживает транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти.
Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
Ключевые улучшения (https://raw.githubusercontent.com/antirez/redis/5.0/00-RELEA...), добавленные в Redis 5.0:
- Представлен новый тип данных Stream (https://redis.io/topics/streams-intro), который можно использовать для хранения данных в форме пополняемого лога. Записи с типом Stream могут открываться только в режиме пополнения, но допускается удаление произвольных элементов из лога и имеется возможность ограничения максимального размера лога, например, можно сохранять не больше N элементов с удалением самых старых записей по мере поступления новых. Предоставляются средства для отслеживания добавления новых элементов, осуществления различных выборок данных и применения Stream в качестве системы обработки сообщений.
Для организации совместной обработки разных частей одного потока сообщений реализована концепция Consumer Groups, при которой сообщение может снабжаться идентификатором группы и несмотря на отправку в общий поток, получить это сообщение сможет только клиент с указанным идентификатором (например, через общий поток можно организовать распределение команд среди разных обработчиков);
- Реализованы новые API для модулей: Timers, Cluster и Dictionary;
- В дампах RDB теперь сохраняется информация об алгоритмах замещения элементов LFU (Least-Frequently Used, вытеснение на основе частоты обращения к элементу) и LRU (Least Recently Used, вытеснение на основе времени последнего обращения);
- Код управления кластером переписан с Ruby (redis-trib.rb) на Си и встроен в redis-cli (доступен через команду "--cluster");
- Реализованы новые команды ZPOPMIN (https://redis.io/commands/zpopmin) и ZPOPMAX (https://redis.io/commands/zpopmax), а также их блочные вариаеты BZPOPMIN (https://redis.io/commands/bzpopmin) и BZPOPMAX (https://redis.io/commands/bzpopmax), которые извлекают и возвращают из отсортированного набора указанное число наименьших или наибольших значений;
- Реализована вторая версия системы активной дефрагментации памяти, которая позволяет выполнять дефрагментацию налету без остановки работы, если применяется система распределения памяти Jemalloc (в Linux по умолчанию);
- Улучшена реализация алгоритма HyperLogLog (https://en.wikipedia.org/wiki/HyperLogLog);
- Расширены отчёты о состоянии памяти;- Во многие составные команды, включающие субкоманды, добавлена встроенная подсказка (субкоманда HELP);
- Проведена оптимизация для повышения производительности в условиях частого соединения и отсоединения клиентов;- Менеджер распределения памяти Jemalloc (http://jemalloc.net/) обновлён до версии 5.1;- Добавлены команды: CLIENT UNBLOCK (https://redis.io/commands/client-unblock) для досрочного снятия блокировки с соединения, выставленной при выполнении блокирующих операций (например BRPOP, XREAD, WAIT); CLIENT ID (https://redis.io/commands/client-id) для получения идентификатора текущего соединения;- Добавлена развлекательная команда LOLWUT (http://antirez.com/news/123), с реализацией пасхальных яиц, которые будут меняться в каждой новой версии Redis;
- Проведена оптимизация кода обработки сетевых соединений;
- Выполнена работа по избавлению от терминов "master" и "slave" в коде. Команда "SLAVEOF (https://redis.io/commands/slaveof)" переименована в "REPLICAOF", а настройка "slaveof" в "replicaof" (для обеспечения совместимости поддержка "SLAVEOF" сохранена). Поддержка признака "slave" в командах INFO (https://redis.io/commands/info) и ROLE (https://redis.io/commands/role) пока оставлена, так как связана с большими нарушениями совместимости (в будущем планируется предложить альтернативу INFO и заменить в ROLE "slave" на "replica");
- Расширены возможности по созданию скриптов-обработчиков на языке Lua.
URL: https://groups.google.com/forum/#!topic/redis-db/l0OXDAlwosU
Новость: https://www.opennet.me/opennews/art.shtml?num=49495