После года разработки увидел свет релиз новой стабильной ветки БД Redis 2.6, относящейся к классу NoSQL-систем и развиваемой при содействии компании VMware. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества. В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl.
Имеется поддержка транзакций, позволяющих выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти. Хранение всех данных в оперативной памяти позволяет добиться значительной производительности: при тестировании Redis на сервере с CPU Xeon X3320 2.5 ГГц удалось обеспечить 110000 операций записи и 81000 операций чтения в секунду.
Для управления данными поддерживаются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
Ключевые улучшения, добавленные в Redis 2.6:
- В Redis встроен интерпретатор Lua и добавлена поддержка написания работающих на стороне сервера скриптов на языке Lua. Для выполнения таких скриптов добавлена команда EVAL. Из скриптов можно обращаться к функциям Redis через использованием методов .call() и .pcall(). Преобразование типов данных Redis и Lua осуществляется автоматически;
- Проведена большая работа по повышению стабильности и пригодности Redis для промышленного применения. Решены проблемы с отзывчивостью в условии одновременного завершения времени жизни большого числа элементов (использован новый неблокирующий алгоритм чистки устаревших элементов) или при использовании медленных жестких дисков. Добавлены средства самодиагностики для отслеживания внештатных ситуаций. Изменены настройки по молчанию: вторичные slave-системы теперь по умолчанию работают в режиме только для чтения, при выявлении нарушения целостности базы RDB по умолчанию прекращается приём запросов на запись;
- Удалена подсистема с реализацией виртуальной памяти, позволявшая держать в ОЗУ только ключи, а значения перемещать по мере необходимости в специальный файл подкачки. В качестве причины удаления упоминается низкая эффективность в условиях реального применения;
- Добавлена возможность определения таймаутов и времени жизни ключей с миллисекундной точностью. Добавлены новые команды PEXPIRE, PSETEX, PTTL, которые оперируют миллисекундами;
- Сняты определённые в коде ограничения на максимальное число клиентов;
- Ускорена работа режима записи AOF (append-only-file) за счёт поддержки перезаписи агрегатных типов данных. Расширена семантика для управления AOF-файлами;
- Оптимизировано потребление памяти при работе с мелкими списками, zip-списками и хэшами, в ситуации когда в них используются небольшие целочисленные значения;
- Добавлены новые битовые команды BITCOUNT и BITOP;
- Поддержка задания для клиентов мягких и жестких лимитов на размер выходного буфера, позволяющих использование разные лимиты для разных классов клиентов;
- Для всех директив redis.conf подготовлены аналогичные опции командной строки;
- Увеличена производительности записи больших объектов;
- Реализован встроенный тест памяти (redis-server --test-memory);
- Добавлены команды INCRBYFLOAT и HINCRBYFLOAT;
- Из продукта Redis Cluster портированы команды DUMP, RESTORE и MIGRATE;
- Для RDB-файлов добавлена проверка целостности по контрольным суммам CRC64;
- Улучшено поведение команды MONITOR, которая теперь выводит параметры команды до начала её исполнения;
- Добавлена функция "Software Watchdog" для отладки проблем с отзывчивостью БД;
- Переписана или реструктуризирована значительная часть ядра Redis, что позволило обеспечить формирование Redis Cluster на базе единого кода с Redis. Весь код для работы в режиме кластера временно удалён и будет возвращён в выпуске Redis 3.0, после доработки и стабилизации;
- Расширены возможности утилиты redis-benchmark, добавлена поддержка запуска избранных тестов и возможность вывода результатов в CSV;
- В команду SHUTDOWN добавлена поддержка необязательных аргументов "SAVE" и "NOSAVE";
- Добавлена команда "INFO commandstats" для вывода статистики как часто выполнялись команды и сколько времени было потрачено на их выполнение;
- Улучшена поддержка систем big endian и *BSD;
- Расширены возможности системы сборки.
|