Релиз БД Redis 2.2
Сальвадор Санфилиппо (Salvatore Sanfilippo), работающий в компании VMWare, представил новую стабильную ветку БД Redis 2.2. Redis относится к классу NoSQL-систем, предоставляя похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества. Для управления данными поддерживаются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl.В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений, во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создается канал, сообщения из которого распространяются клиентам по подписке.
Хранение всех данных в оперативной памяти позволяет добиться значительной производительности: при тестировании Redis на сервере с CPU Xeon X3320 2.5 ГГц удалось обеспечить 110000 операций записи и 81000 операций чтения в секунду. Для случаев когда данных слишком много, предусмотрен специальный режим, позволяющий держать в ОЗУ только ключи, а значения перемещать по мере необходимости в специальный файл подкачки. Также имеется поддержка транзакций, позволяющих выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения.
Из наиболее важных отличий ветки 2.2 от прошлых выпусков можно отметить:
- Проведена большая работа по оптимизации потребления памяти, результаты особенно заметны при хранении специально кодируемых типов данных, списков и множеств;
- Частично переписан код по организации работы виртуальной памяти, обеспечивающей вытеснение части данных из ОЗУ на диск. Изменение позволило заметно увеличить эффективность расходования памяти;
- Значительно расширены возможности клиента для выполнения операций в режиме командной строки - redis-cli: добавлена поддержка автодополнения ввода при нажатии табуляции, интегрирована встроенная справка по командам Redis, добавлена возможность вывода в сыром формате (raw);
- С целью повышения эффективности, переписаны компоненты, обеспечивающие функции сетевого взаимодействия. Например, команды, подобные LRANGE, теперь выполняются как минимум в 10 раз быстрее, чем раньше;
- Реализован неблокирующий режим репликации данных на стороне основного и подчиненного (slave) серверов. Например, slave-сервер можно настроить так, что в случае отключения канала связи он будет продолжать работу со старым набором данных или выводить ошибку , а после восстановления соединения все изменения будут синхронизированы;
- Поддержка CAS-транзакций (Check-and-set) и новой команды WATCH, позволяющих обеспечить запись значений при истечении времени жизни ключей;
- Новые правила вытеснения записей в ситуации исчерпания свободной памяти: предоставлена возможность выбора между LRU, вытеснением старейших значений TTL и другими алгоритмами;
- Новые функции для обработки строк как массивов: SETBIT, GETBIT, SETRANGE, GETRANGE и STRLEN;
- Добавлена поддержка соединения с Redis-сервером через доменный UNIX-сокет (Unix domain socket);
- Новые функции для работы со списками: LINSERT, LPUSHX, RPUSHX;
- Расширен вывод информации, отображаемой по команде INFO;
- Оптимизировано потребление памяти при хранении отсортированных списков;
- Загрузка дампов .rdb / AOF при запуске теперь возможна в неблокирующем режиме;
- Добавлена новая библиотека для обращения к Redis из программ на языке Си - hiredis.
Летом планируется выпустить Redis 3.0, который будет поддерживать организацию распределенных на несколько машин хранилищ. Сейчас Redis поддерживает только полную репликацию данных и предоставляет базовые функции для упрощения организации шардинга на стороне клиента (разбиение БД на несколько серверов, отталкиваясь от наименований ключей).
© OpenNet