我有一个由公牛管理的redis列表。我想用不同的过程来监控这个列表的长度。我是redis的新手,所以虽然我认为我已经找到了"正确"的方法来做这件事,但我遇到了问题。
从一个小的研究,我了解到Redis有按键空间通知从2.8.0开始,他们听起来很合适。
在我继续之前,我只想确认我已经启用了keyspace事件:
127.0.0.1:6379> CONFIG GET notify-keyspace-events
1) "notify-keyspace-events"
2) "AKE"
同时,根据INFO
,我认为我在数据库0上:
# Keyspace
db0:keys=315,expires=0,avg_ttl=0
说到这里:我订阅我想要的频道有问题。该模块在键下创建和管理列表:'公牛:测试队列:等待',因此根据键空间通知的文档,我的理解是我应该做以下事情来收听推送和弹出事件。
-
SUBSCRIBE "__keyspace:0__:bull:Test Queue:wait rpush"
-
SUBSCRIBE "__keyspace:0__:bull:Test Queue:wait lpush"
-
SUBSCRIBE "__keyspace:0__:bull:Test Queue:wait rpop"
-
SUBSCRIBE "__keyspace:0__:bull:Test Queue:wait lpop"
如果我运行1。在一个进程中,然后在另一个进程中执行:
RPUSH "bull:Test Queue:wait" 222
那么订阅就不会收到消息。奇怪的是,如果我使用PSUBSCRIBE
并收听"__keyspace:0__:bull:Test Queue:wait*"
,那么它会正确地触发。但我不是在寻找所有事件,只是推搡和弹出。所以这不是我想要的。
如果有人能告诉我我做错了什么,我将不胜感激。
感谢您的宝贵时间。
我误解了文档。
通道为__keyspace:0__:bull:Test Queue:wait
,消息为rpush
、lpush
等。或者,通道可以是:__keyspace:0__:rpush
,消息可以是bull:Test Queue:wait
。
感谢Jan-Erik Rediger在讨论区帮助我。