我有一个程序,它会从Redis数据存储中轮询某个键,并在值满足特定条件时执行某些操作。
然而,我认为定期在Redis上轮询效率相当低下,我想知道是否有一种“触发器”机制适用于Redis,当值更改并满足条件时,将调用该触发器。该触发器可能是一个RPC函数、HTTP消息或其他东西,这样我就不需要再轮询了,就像轮询和中断之间的区别。
这种可能吗?
SUBSCRIBE
到一个 "channel",然后应用程序的另一部分通过 (PUBLISH
) 将要更改的值写入该 channel。您的订阅者(消费者,即想要了解更改的客户端)将几乎实时地收到通知。CONFIG SET
命令来 配置 该功能。例如,以下命令将启用 String 命令的 keyspace 事件:> CONFIG SET notify-keyspace-events K$
OK
SUBSCRIBE
命令订阅特定命名的频道。例如,要监听DB 0中mykey
键的keyspace事件:> SUBSCRIBE __keyspace@0__:mykey
Reading messages... (press Ctrl-C to quit)
通过从另一个客户端设置键的值来测试该功能:
> SET mykey myvalue
OK
1) "message"
2) "__keyspace@0__:mykey"
3) "set"
如果您可以使用Pub/Sub,那是最好的。如果由于某种原因无法使用,您也可以使用(性能受影响的)MONITOR
命令,该命令将向您发送服务器接收到的每个命令。这可能不是一个好主意。
特别针对列表,您可以使用BLPOP
,它将阻塞连接,直到有新项目可从列表中弹出。
怎么样加入一个消息框来处理?比如,当两个消息(AND运算)同时满足条件时,就触发另外一个消息,我认为这样做可以起到一定的作用。类似于JBPM,但不需要那么复杂。