Попытался в 100500-ый раз вникнуть в REDIS для того, чтобы отказаться от самописного сервиса в пользу чего-то более стабильного и надежного. Первым и наиболее советуемым оказался REDIS, но... или я не докуриваю его возможности, или он все-таки не подходит...
Суть текущего модуля:
- центральный сервис, к которому подключаются "клиенты"
- любой клиент может отправить на сервис команду установки/удаления пары "ключ-значение"
- сервис уведомляет всех остальных клиентов (что-то типа широковещательной трансляции)
это еще худо-бедно реализуемо с помощью "SET key... + PUBLISH key", а клиенты соответственно получив сообщение с ключем его могут запросить... а дальше то, что я не смог докурить на базе редиса
- клиенты при чтении пары должны знать не только ее значение, но и назначенное время жизни + время истечения
- некоторые устанавливаемые пары имеют время жизни, сервис сам отслеживает когда пара должна удалиться, удаляет ее у себя и рассылает САМ сообщение об этом всем клиентам
Возможно ли все-таки это сделать на базе редиски или может есть альтернатива с нужным мне функционалом?
В общем пришлось оптимизировать свой велосипед, но связать его с редисом как с дублирующим хранилищем...
В процессе работы "велосипед" дублирует все операции по созданию/удалению записей в редис, а в случае падения или рестарта, он из редиса загружает сначала весь "дамп данных" с учетом поступающих изменений в процессе инициализации из редиса.
Стало поустойчивее и нагрузку поболее держит без риска потери быстрых данных. Скорее всего, это инвалид на костылях, но узким местом сейчас стал только сетевой интерфейс и канал до клиентов, если клиент слишком много хочет читать реалтайм, то канал к этому клиенту должен быть настолько толстым, чтобы данные прокачивались без потерь и задержек, иначе пока данные дойдут, могут стать просто неактуальными =)
Правильно ли я понимаю, что средствами редиски без доп. приблуды, которая будет следить за таймерами и рассылать уведомлялки об удалении (пусть даже через тот же редис), мне не обойтись?
если вам нужны события при удалении ключа, то тут вам придётся написать свой собственный "велосипед". По мимо полезных данных, вам придётся ещё записывать дополнительное поле, указывающее время, когда убивать ключ/значение, а где-то в параллельном потоке запускать демона, который будет постоянно проверять ключи, удалять их и отправлять уведомления.