После полутора лет разработки увидел свет (https://groups.google.com/forum/#!msg/redis-db/dO0bFyD_THQ/U... релиз новой стабильной ветки БД Redis 3.0 (http://redis.io/), относящейся к классу NoSQL-систем и развиваемой при содействии компании VMware. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl.Имеется поддержка транзакций, позволяющих выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти. Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
Ключевые улучшения (https://raw.githubusercontent.com/antirez/redis/3.0/00-RELEA... добавленные в Redis 3.0:
- Интегрирован Redis Cluster (http://redis.io/topics/cluster-tutorial) для создания распределённых хранилищ. Redis Cluster позволяет развернуть конфигурацию в которой данные автоматически распределяются между несколькими узами Redis. Возможно создание отказоустойчивых конфигураций, при которых данные дублируются на разных узлах и выход одного узла из строя не приводит к остановке работы;- Новый тип кодирования объектов "embedded string", при котором более эффективно используется кэш;
- Значительно улучшен алгоритм LRU (https://ru.wikipedia.org/wiki/%D0%90%D0%... применяемый при вытеснении неиспользуемых ключей;
- Добавлена команда WAIT для ожидания передачи записываемого блока на заданное число slave-узлов;
- В команду MIGARTE добавлены новые опции COPY и REPLACE, реализована поддержка кэширования соединений;
- Добавлена команда CLIENT PAUSE, позволяющая остановить обработку запросов клиента на заданный промежуток времени;
- Проведена оптимизация производительности команд BITCOUNT и INCR;
- Переработан режим AOF (Append Only File), в котором удалось снизить задержки при выполнении операций записи на медленных дисках;- В команде CONFIG SET обеспечена возможность указания различных величин размерности памяти (например, "CONFIG SET maxmemory 1gb");
- Немного изменён формат лога, в котором теперь отражаются данные о типе узла (master/slave);
- Проведён полный рефакторинг организации блокировок и отслеживания выходных буферов.
URL: https://groups.google.com/forum/#!msg/redis-db/dO0bFyD_THQ/U...
Новость: http://www.opennet.me/opennews/art.shtml?num=41958
Годная БД. Главное применять её по назначению. Надо будет поиграться с кластерным режимом, если реализация качественная - можно будет наконец-то положить в Redis важные данные и не бояться их потери.
Норм в нем держать хранилище сессий всякие, правда уже года три приходится держать на нем весьма важные данные - sidekiq использует его для хранения данных в своей очереди и особо проблем не было, но это не означает, что они невозможны.
Вот уж точно. Когда нагрузка становится такая что "важные" данные приходится их надежных sql баз переносить в редис. А как иначе? Подумаеш, были важные данные стали не очень важные. Профит от большего количества обслуженых клиентов все покроет :D
Так и не смог понять зачем оно нужно.
Довольно медленно работает. В кластере кране ненадёжно.
При сбоях в сети может терять 50% сообщений. Клиенту говорит, что всё ОК.
https://aphyr.com/posts/283-call-me-maybe-redisДаже на Java быстрее делают :-D
http://java-is-the-new-c.blogspot.de/2014/12/a-persistent-ke...
Если ты прочитаешь внимательно свои ссылки, то jepsen ссылается на sentinel. В трешке как раз новая система поиска консенсуса.
Ну и джавошной реализации очень далеко по фичам до редиса.
Это просто пример, что подобные системы относительно просты.
У Редиса почему-то всегда было слабо с производительностью.
> У Редиса почему-то всегда было слабо с производительностью.А можно носом ткнуть в указанных ссылках, что у Редиса слабо с производительностью?
Я вот изучил указанную ссылку... Там реализована самая примитивная структура, никаких структур наподобие редисовских, ориентация на сингл-коннект... У редиса ориентация на большое количество коннектов. Указанная Java реализация очень сильно просядет на такой конфигурации и ее хваленные сотни тысяч операций в секунд исчезнут в никуда, когда редис их наоборот покажет ...
> Это просто пример, что подобные системы относительно просты.Бгг. Пока система ничего не умеет, то да — относительно просты.
в ссылках редис версии 2013 года...
а правда что оно до сих пор однопоточное внутри? даже memcached многопоточный
> а правда что оно до сих пор однопоточное внутри? даже memcached многопоточныйПравда. Используй несколько инстансов.
замечательно, давайте на машинке запустим 12 инстансов и за одно поделим 64 ГБ на них, очень сильно у меня производительность выросла, а главное как экономно.
> замечательно, давайте на машинке запустим 12 инстансов и за одно поделим 64
> ГБ на них, очень сильно у меня производительность выросла, а главное
> как экономно.Ничего страшного и даже такая архитектура очень полезна, с точки зрения расширяемости. Если что раз и перекинул часть инстансов на другую машину.