Представлен релиз новую стабильную ветку БД Redis 2.4, относящуюся к классу NoSQL-систем и развиваемую при содействии компании VMWare. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества. В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl. Почти сразу после Redis 2.4.0 был выпущен корректирующий релиз 2.4.1 с исправлением нескольких проблем.
Для управления данными поддерживаются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создается канал, сообщения из которого распространяются клиентам по подписке.
Для случаев когда данных слишком много, предусмотрен специальный режим, позволяющий держать в ОЗУ только ключи, а значения перемещать по мере необходимости в специальный файл подкачки. Также имеется поддержка транзакций, позволяющих выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Хранение всех данных в оперативной памяти позволяет добиться значительной производительности: при тестировании Redis на сервере с CPU Xeon X3320 2.5 ГГц удалось обеспечить 110000 операций записи и 81000 операций чтения в секунду.
Ключевые улучшения, добавленные в Redis 2.4:
- За счет использования специального кодирования при работе с отсортированными списками, удалось заметное понизить потребление памяти при использовании небольших упорядоченных списков;
- Увеличена скорость загрузки и сохранения для списков, включающих уже сериализованные данные. Например, исключено выполнение дублирующей сериализации для использующих специальное кодирование типов ziplist, zipmap и intset;
- Возможность одновременного указания нескольких значений для почти всех команд, связанных с записью: SADD, HDEL, SREM, ZREM, ZADD и L/RPUSH. Например, "HDEL hash field2 field3 field3..." позволяет за раз удалить несколько элементов;
- Поддержка библиотеки с реализацией высоко эффективных функций распределения памяти Jemalloc, которая теперь используется по умолчанию при работе на платформе Linux. Jemalloc позволяет заметно снизить уровень фрагментации памяти;
- Сокращено потребление памяти в процессе записи данных за счет сокращения числа операций дублирующего копирования (copy-on-write) при работе с хранилищем RDB и логом AOF;
- Расширение числа информационных полей, выводимых при выполнении команды INFO. Например, дополнительно отображается пиковое потребление и пиковая фрагментация памяти, время форка.
- Новая отладочная команда OBJECT для анализа объектов. Команда позволяет изучить внутренности объектов, ассоциированных с ключами, понять используется ли дополнительное кодирование для ключей. При использовании Redis в качестве кэша выдаваемая командой OBJECT информация может быть полезна для реализации механизма вытеснения ключей, работающего на уровне приложения;
- Новая отладочная команда CLIENT для анализа клиентов. Команда позволяет посмотреть список клиентов и при необходимости принудительно разорвать соединение;
- Поддержка выполнения соединения от slave к master в неблокирующем режиме (репликация реализована в неблокирующем режиме изначально, но выполнение операции connect могло приводить к блокировке);
- Улучшена обработка соединений в командной оболочке redis-cli, например теперь производится реконнект после обрыва связи. Добавлена поддержка указания цифровых префиксов перед командами, через которые передаётся число повторов. Например, "4 ping" приведёт к выполнению команды ping четыре раза подряд. В сочетании с утилитой grep теперь возможен мониторинг отдельных параметров INFO, например: "./redis-cli -r 10000 -i 1 info | grep used_memory_human";
- Расширены возможности команды redis-benchmark, которая теперь может измерять производительность произвольной команды, заданной пользователем;
- При выполнении утилиты make, вывод теперь выделяется разными цветами, что упрощает восприятие ошибок и предупреждений на этапе сборки;
- Подсистема с реализацией виртуальной памяти признана устаревшей. В будущих версиях код VM будет удалён, как не эффективный и не оправдавший надежды. Механизм VM, позволял держать в ОЗУ только ключи, а значения перемещать по мере необходимости в специальный файл подкачки.
- Многочисленные оптимизации производительности и устранения ошибок;
- Подготовлен порт Redis для платформы Windows;