如何实现redis数据存储的“触发器”?

2admgd59  于 2021-06-07  发布在  Redis
关注(0)|答案(4)|浏览(708)

我有一个程序,它将轮询redis数据存储中的某个键,并在值满足某个条件时执行某些操作。
不过,我觉得在redis上周期性的轮询效率比较低,我想知道redis是否有一个“trigger”机制,当值发生变化并且满足条件时,就会调用trigger。触发器可能是一个rpc函数,或者一个httpmsg,或者其他什么,这样我就不需要再轮询它了,就像轮询和中断之间的区别一样。
这可能吗?

bbmckpt7

bbmckpt71#

自从redis 2.8(2013年11月22日发布)以来,现在有一个称为keyspace notifications的功能,它允许客户端为keyspace事件订阅特殊的pub/sub通道,您可以将其用作某个密钥的触发器。
默认情况下,该功能被禁用,因为“虽然不太合理,但该功能使用了一些cpu电源。” CONFIG SET 命令来配置功能。例如,以下命令将为字符串命令启用键空间事件:

> 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

您应该在订阅的客户端中收到一条消息:

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

接收到事件后,可以获取更新后的值,并查看它是否满足应用程序代码中的条件。

x33g5p2x

x33g5p2x2#

您可以使用redis的pub/sub特性。这正是你所描述的情况下所需要的。
基本上,你 SUBSCRIBE 应用程序的另一部分写入( PUBLISH )正在更改为该通道的值。您的订户(消费者,希望了解更改的客户)将得到几乎实时的通知。

xytpbqjk

xytpbqjk3#

如何处理一个消息框?例如,2个消息(和操作)可以触发另一个消息,我认为这可以说明一些问题?像jbpm,但并不复杂。

xeufq47z

xeufq47z4#

如果你能使用pub/sub,那是最好的。如果由于某种原因无法工作,您还可以使用(性能影响) MONITOR 命令,它将向您发送服务器接收到的所有命令。那可能不是个好主意。
特别是对于列表,你有 BLPOP ,这将阻止连接,直到可以从列表中弹出新项目。

相关问题