Представлен (https://groups.google.com/forum/#!msg/redis-db/5Kh3viziYGQ/5...) релиз СУБД Redis 4.0 (http://redis.io/), относящейся к классу NoSQL-систем. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua.В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl. Redis поддерживает транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти.
Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
Ключевые улучшения (https://raw.githubusercontent.com/antirez/redis/4.0/00-RELEA...), добавленные в Redis 4.0:
- Реализован новый движок репликации - PSYNC2 (Partial Replication v2), предлагающий более эффективные методы согласования обмена данными и доставки изменений между первичными и вторичными узлами. Вторичные узлы (slave) теперь могут переводиться в категорию первичных (master) без проведения полной ресинхронизации и могут на лету принять на себя репликацию на другие вторичные узлы. Кроме того, вторичные узлы теперь могут быть временно остановлены, например для проведения обновления, а после возвращения в строй доведены до актуального состояния при помощи частичной ресинхронизации, охватывающей только изменившиеся за время простоя данные.
Более того, первичный узел может быть переведён во вторичный и присоединён к новому первичному узлу с выполнением лишь частичной ресинхронизации или первичный и вторичный узлы могут поменяться местами. Значительно изменена работа при организации цепочек репликации, в которых одни вторичные узлы (sub-slave) реплицируются от других вторичных узлов. Поток репликации для slave и sub-slave теперь не отличается и идентичен потоку, отдаваемому главным первичным узлом.
Новый протокол репликации обратно совместим с прошлыми выпусками, что позволяет использовать Redis 4.0 на slave-серверах, подключаемых к master-узлам на основе старых выпусков Redis;
- Обеспечена (https://github.com/antirez/redis/blob/unstable/src/modules/I...) возможность подключения дополнительной функциональности через модули. Redis теперь может применяться как фреймворк для создания сетевых сервисов - через модули могут быть добавлены новые возможности и структуры хранения данных, реализованы новые типы и вынесены в отдельные потоки медленные обработчики, которые не будут блокировать основной поток запросов. API для создания модулей абстрагирован от ядра Redis, что позволяет использовать один и тот же модуль с разными версиями Redis без внесения в него изменений;
- Улучшена (http://antirez.com/news/109) работа кэша, который теперь поддерживает алгоритм замещения элементов LRU (Least-Frequently Used), который обеспечивает вытеснение на основе частоты обращения к элементу, а не на основе времени последнего обращения (LRU, Least Recently Used);
- Операции DEL, FLUSHDB и FLUSHALL теперь могут выполняться в фоновом режиме с выносом обработчика в отдельный поток, не блокирующий основной процесс. Для фонового удаления вместо DEL предлагается команда UNLINK, а для фонового выполнения команд FLUSH* необходимо указать опцию ASYNC;- Представлена новая команда SWAPDB, которая позволяет полностью и мгновенно заменить одно содержимое БД на другое. Замена выполняется атомарно без ощутимых задержек;
- Реализован новый комбинированный режим сброса данных на диск, который сочетает использование полного дампа RDB и AOF-лога (Append Only File), отражающего изменения, внесённые с момента создания дампа;
- В число поддерживаемых платформ добавлены платы Raspberry Pi, работа на которых теперь проверяется для каждого выпуска Redis;
- Добавлена новая команда MEMORY и её варианты "MEMORY USAGE", "MEMORY OVERHEAD" и "MEMORY DOCTOR", предоставляющие средства для анализа использования памяти в Redis и диагностики проблем;
- Расширены возможности Redis Cluster, в котором появилась поддержка запуска узлов в контейнерах с NAT и контейнерах Docker, улучшен код определения сбоев, снижена нагрузка на CPU;
- Добавлена поддержка активной дефрагментации памяти, которая позволяет выполнять дефрагментацию налету без остановки работы, если применяется система распределения памяти Jemalloc (в Linux по умолчанию);
- Снижено потребление памяти, в процессе работы тот же набор данных теперь занимает меньше ОЗУ;
- Модернизирован формат дампов RDB, в котором теперь поддерживаются 64-разрядные размеры блоков и предварительно отсортированные метаданные;
- Увеличена эффективность реализации хэш-таблиц (тип dict);- Добавлена защита от межпротокольных атак (https://www.opennet.ru/opennews/art.shtml?num=45321), в которых используется сходство элементов протокола "POST" и "Host:" в HTTP и Redis, что позволяет отправить POST-запрос к Redis на локальной системе из запущенного в браузере web-приложения;
- Команды RPUSHX и LPUSHX теперь могут принимать произвольное число элементов;
- Серьёзно переработаны некоторые внутренние подсистемы.
URL: https://groups.google.com/forum/#!msg/redis-db/5Kh3viziYGQ/5...
Новость: http://www.opennet.ru/opennews/art.shtml?num=46856
Ух ты, как раз ругался на топорность мастер-слейв репликации и сложность впихивания этого в продакшн. Будем посмотреть.
Что именно для вас там было топорно?
Что за дурацкая привычка коверкать русский язык?"Будем смотреть" - так правильно.
Или Пучкова начитался и обезьянничаешь?
Заметил, что memcached последнее время возродился и активно развивается -https://github.com/memcached/memcached/ Даже пару дней назад релиз 1.4.29 выпустили, в котором закрыли DoS-уязвимость CVE-2017-9951 (https://www.twistlock.com/2017/07/13/cve-2017-9951-heap-over.../)
> Заметил, что memcached последнее время возродилсяда уж охренеть как "возродился" - в issues мега-проблемы 2012го года (особенно хороша - "мы жрем # в конфиге как управляющий символ" - ну никак с 15го года не одолеть ее), в коммитах - какая-то сомнительная возня непойми с чем и ради чего.
issues:
Add drop_privileges() for Linux needs review/testing
#95 opened Dec 15, 2014 by viraptor
- вот с 2014го needs. Никак двадцать строчек ниасилить. Единственный автор с того самого года ниасилил себе тестовый билдхост под линуксом...> в котором закрыли DoS-уязвимость CVE-2017-9951
которая закрывала DoS-уязвимость CVE-2016-8705, да так и ниасилила.
с другой стороны, если вас беспокоят уязвимости в memcached - вы ох..ли...э... вы выбрали совершенно неподходящий для вашей задачи сервис хранения.
И чем меньше не в меру активные рукожoпы лазят в этот код, тем лучше. А там - все равно перейдем поголовно на redis. Вот ровно потому, что у него есть вменяемые разработчики и твиттер с вмварью им платит.
> жрем # в конфиге как управляющий символУ memcached нет конфига.
Всякие там обертки из дистрибутивов - это привет мейнтенерам дистрибутивов.
> У memcached нет конфига.вас обманули. Поинтересуйтесь содержимым
https://github.com/memcached/memcached/blob/master/scripts/s...
(существует практически столько же, сколько и сам memcached)> Всякие там обертки из дистрибутивов - это привет мейнтенерам дистрибутивов.
наоборот - привет рукожопому майнтейнеру вашего дистрибутива, который не знал, что у memcached'а таки есть вполне себе штатный конфиг и штатный скрипт запуска, умеющий его парсить (хреново ;-)
правда, сейчас это уже немодно, тру хипстеры каждый раз вручную юнит для systemd переписывают (который умеет читать из отдельного конфига четыре ненужных параметра, а если надо, к примеру, не торчать на внешнем интерфейсе - то "отредактируйте unit")
Это как раз дебиановский скрипт.
в репозиторий memcached его сунули относительно недавно, уже при Фейсбуке
Не гони на юниты. Во первых тебя никто не заставляет отказываться от конфигов (если ты конечно хоть что-то разрабатываешь). Во вторых отредактировать юнит не сложнее чем отредактировать конфиг или скрипт. И там и тут простой текстовый файл, написанный по простым правилам (в случае скрипта правила немного усложняются конечно). А в третьих тот же юнит(+конфиг) дает намного больше возможностей и удобства, чем тот же "инит-скрипт" + конфиг. Начиная от того что пишется один раз, а работает на всех дистрибутивах и заканчивая тем, что не нужно скрипт 4 раз копировать что бы 6 инстасов запустить.
> Не гони на юниты. Во первых тебя никто не заставляет отказываться от конфиговтам _есть_ конфиг ;-)
Феерически бессмысленный. И рекомендация "если что - поменяйте прямо в скрипте"
- соблюдая меры предосторожности, чтоб его не автопооверрайдило при апгрейде ;-)> Начиная от того что пишется один раз, а работает на всех дистрибутивах
без ручного вмешательства все равно не работает, потому что ты не знаешь, что именно в этом дистрибутиве должно стартовать ДО (вероятно, как минимум, сеть?) и что - после (вероятно, использующий софт), и как то и другое в данном дистрибутиве угораздило называться (то что все systemd-based копипастят друг у друга, это не заслуга systemd).
Какая разница, делаем мы это редактируя заголовок или внешней интуитивно-приятной программой?
А если эту мелочь вынести за скобки - ну вот и остается start-memcached - вполне себе дистрибутивонезависимый (правда, requires perl, но все уже привыкли - pure-config-args не шибко лучше, смысл тот же)> и заканчивая тем, что не нужно скрипт 4 раз копировать что бы 6 инстасов запустить.
этот - нужно ;-) Ну да, можно было бы и получше написать - ну так и sh скрипт тоже можно (вон, freebsd'шный mysqld вполне умеет сто инстансов - интересно, кто этим пользуется)
Единственная явно видимая польза - memcache как раз явный кандидат на услуги автоперезапускалки. Но daemontools тоже в общем-то никто не отменял.
хорошие новости
> Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы.Зачем людей обманываете?
> Зачем людей обманываете?а что не так? AOF в fsync mode вполне себе гарантирует и консистентность, и завершенность операций (настолько, насколько их обеспечит fs, как и у всех)
"но зачем?"
> "но зачем?"что зачем? некоторым вот нужна полная гарантия, ессно в рамках возможности железа и фс, но это уже другой уровень
`mount -o sync` спасёт отца русской демократии.
Интересное чтиво от автора redis - http://antirez.com/news/60. Автор redis-а не рекомендует использовать redis в качестве основной базы данных или можете оказаться без данных
Комментатором на opennet-е и маминым админам этого к сожалению не понять
> Комментатором на opennet-е и маминым админам этого к сожалению не понятькуда им... они даже не замечают, что по ссылке некропостинг 2013го года, и речь там о redis 2 (кто им тогда вообще пользовался, блин, и зачем?)
Сегодня никто не мешает применять его в такой позе, будет ничуть не хуже всеми любимого постгреза, и чинить в случае чего легче - "но зачем?"
Кто может нарисовать вменяемый use-case и как в нем выглядят структуры данных?
> Интересное чтиво от автора redis - http://antirez.com/news/60. Автор redis-а не рекомендует
> использовать redis в качестве основной базы данных или можете оказаться без
> данныхЭта заметка была написана 4 года назад, когда в Redis был только достаточно топорный периодический сброс бэкапа в файл. С тех пор появилось что-то похожее на журналирование.
>в случае проблем позволяя откатить измененияКакой командой?
> Какой командой?DISCARD жеж
Только это для проблем в логике приложения, а не проблем с базой, как можно было подумать.
>и ведение на диске лога измененийКак это включить?