Как реализовать «триггер» для redis datastore? - PullRequest
11 голосов
/ 28 февраля 2012

У меня есть программа, которая опрашивает определенный ключ из хранилища данных redis и делает что-то, когда значение удовлетворяет определенному условию.

Тем не менее, я думаю, что периодический опрос redis довольно неэффективен, яМне интересно, если есть механизм «триггера» для Redis, когда значение изменяется и удовлетворяет условию, триггер будет вызван.Триггер может быть функцией RPC, HTTP-сообщением или чем-то другим, так что мне больше не нужно опрашивать его, как различие между опросом и прерыванием.

Возможно ли это?

Ответы [ 3 ]

15 голосов
/ 28 февраля 2012

Вы можете использовать функцию Pub / Sub Redis. Это именно то, что вам нужно, учитывая ваши обстоятельства, как вы описали.

По сути, вы SUBSCRIBE переходите на «канал», а другая часть вашего приложения записывает (PUBLISH) значение, изменяемое для этого канала. Ваш подписчик (потребитель, клиент, который хочет знать об изменении) будет получать уведомления практически в режиме реального времени.

1 голос
/ 25 февраля 2019

Начиная с Redis 2.8 ( выпущено 22 ноября 2013 г.), теперь появилась функция под названием Уведомления о пространстве ключей , которая позволяет клиентам подписываться на специальные каналы Pub / Sub для событий пространства клавиш, которые вы можетеиспользовать в качестве триггера для определенной клавиши.

По умолчанию эта функция отключена, поскольку "хотя она и не очень разумна, эта функция потребляет некоторое количество ресурсов процессора".Чтобы включить, отправьте команду CONFIG SET на , сконфигурируйте функцию.Например, следующая команда включит события пространства клавиш для команд String:

> CONFIG SET notify-keyspace-events K$
OK

Затем используйте обычную команду pubsub SUBSCRIBE, чтобы подписаться на канал с особым именем.Например, для прослушивания событий пространства клавиш на клавише mykey в БД 0:

> SUBSCRIBE __keyspace@0__:mykey
Reading messages... (press Ctrl-C to quit)

Проверьте функцию, установив значение ключа от другого клиента:

> SET mykey myvalue
OK

Youдолжен получить сообщение в подписанном клиенте:

1) "message"
2) "__keyspace@0__:mykey"
3) "set"

После получения события вы можете получить обновленное значение и посмотреть, удовлетворяет ли оно условию в коде вашего приложения.

1 голос
/ 28 февраля 2012

Если вы можете использовать Pub / Sub, это лучше. Если по какой-то причине это не работает, вы также можете использовать (* влияющую на производительность) команду MONITOR, которая будет отправлять вам каждую команду, полученную сервером. Это, вероятно, не очень хорошая идея.

Специально для списков у вас есть BLPOP, который будет блокировать соединение до тех пор, пока новый элемент не будет доступен для извлечения из списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...