我有一个由bull管理的redis列表。我想监视这个列表的长度是一个不同的过程。我是redis的新手,所以当我认为我找到了“正确”的方法时,我遇到了问题。
从一个小小的研究中我认为Redis从2.8.0开始就有Keyspace Notifications,听起来很合适。
在我走得更远之前,我只想确认我启用了密钥空间事件:
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
解决了这个问题:我在订阅我想要的频道时遇到了麻烦。该模块在密钥下创建并管理一个列表:'bull:Test Queue:wait',因此根据密钥空间通知的文档,我的理解是我应该执行以下操作来监听推送和弹出事件。
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*"
,则 会适当地触发。但我不是在寻找所有事件,只是推动和弹出。所以这不是我想要的。
如果有人能告诉我我做错了什么,我们将不胜感激。
感谢您的时间。
答案 0 :(得分:0)
我误解了文档。
频道为__keyspace:0__:bull:Test Queue:wait
,邮件为rpush
,lpush
等。或者,频道可以为:__keyspace:0__:rpush
,邮件为bull:Test Queue:wait
}。
感谢Jan-Erik Rediger helped me out on the discussion board。