После года разработки состоялся релиз СУБД Redis 3.2, относящейся к классу NoSQL-систем и развиваемой при содействии компании VMware. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl.

Redis поддерживает транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти. Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.

Ключевые улучшения, добавленные в Redis 3.2:

  • GEO API с возможностью индексирования координат по широте и долготе, вычисления расстояния и указания допустимого радиуса вокруг искомой точки при формировании запросов;
  • Новая команда BITFIELD, позволяющая использовать строки как битовый массив из набора целых чисел. Числа в массиве можно инкрементировать и декрементировать для использования в качестве счётчиков, настраивать поведение при переполнении;
  • Многочисленные улучшения в Redis Cluster, который позволяет развернуть конфигурацию в которой данные автоматически распределяются между несколькими узами Redis. Добавлены средства ребалансировки в redis-trib и улучшена система миграции реплицированных данных. В нестабильной ветке появилась возможность создания узлов за трансляторами адресов и использования средств Docker по перенаправлению портов.
  • Реализован альтернативный способ репликации Lua-скриптов - "репликация эффекта от работы скрипта", при котором вместо репликации самого скрипта реплицируется последовательность команд записи, получаемых в результате выполнения скрипта. При данном режиме репликации Redis сохраняет все команды выполняемые движком Lua, которые приводят к изменению данных в БД, и затем повторяет эти команды на slave-серверах;
  • Добавлен мощный отладчик скриптов Lua, который можно использовать из redis-cli;
  • Увеличена эффективность использования памяти, реализовано новое внутреннее представление списков, значительно экономящих память при хранении больших списков;
  • Реализовано согласование времени жизни ключей на первичных и slave-серверах при выполнении операций чтения;
  • В команду SPOP добавлена поддержка опционального аргумента со счётчиком;
  • В RDB добавлены AUX-поля и увеличена скорость загрузки RDB-файлов;
  • Обеспечена возможность использования Sentinel для мониторинга масштабируемости первичных серверов.


Источник: http://www.opennet.ru/opennews/art.shtml?num=44383