После полутора лет разработки увидел свет релиз новой стабильной ветки БД Redis 3.0, относящейся к классу NoSQL-систем и развиваемой при содействии компании VMware. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl.
Имеется поддержка транзакций, позволяющих выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти. Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
Ключевые улучшения, добавленные в Redis 3.0:
- Интегрирован Redis Cluster для создания распределённых хранилищ. Redis Cluster позволяет развернуть конфигурацию в которой данные автоматически распределяются между несколькими узами Redis. Возможно создание отказоустойчивых конфигураций, при которых данные дублируются на разных узлах и выход одного узла из строя не приводит к остановке работы;
- Новый тип кодирования объектов "embedded string", при котором более эффективно используется кэш;
- Значительно улучшен алгоритм LRU, применяемый при вытеснении неиспользуемых ключей;
- Добавлена команда WAIT для ожидания передачи записываемого блока на заданное число slave-узлов;
- В команду MIGRATE добавлены новые опции COPY и REPLACE, реализована поддержка кэширования соединений;
- Добавлена команда CLIENT PAUSE, позволяющая остановить обработку запросов клиента на заданный промежуток времени;
- Проведена оптимизация производительности команд BITCOUNT и INCR;
- Переработан режим AOF (Append Only File), в котором удалось снизить задержки при выполнении операций записи на медленных дисках;
- В команде CONFIG SET обеспечена возможность указания различных величин размерности памяти (например, "CONFIG SET maxmemory 1gb");
- Немного изменён формат лога, в котором теперь отражаются данные о типе узла (master/slave);
- Проведён полный рефакторинг организации блокировок и отслеживания выходных буферов.
|