首页 > 解决方案 > redis pub sub 仅适用于某组键?

问题描述

我有一个用例,我只想为一组特定的键启用通知,以便当这些键过期时,我可以从 redis 获得通知。

我已经按照这个答案来实现这个。

我已将参数 notify-keyspace-events 设置为“Ex”

为了实现这一点,我在 DB-0 中添加了我想要通知的键,在 DB-1 中添加了其他键。但我收到了两个数据库的通知。有什么方法可以从特定数据库获取通知?

根据redis文档:

" Redis 可以通知 Pub/Sub 客户端有关键空间中发生的事件。此功能记录在http://redis.io/topics/notifications 例如,如果启用了键空间事件通知,并且客户端对键执行 DEL 操作“foo”存储在Database 0中,两条消息将通过 Pub/Sub 发布:

PUBLISH keyspace@0 :foo del

PUBLISH keyevent@0 :del foo "

但是我收到了来自 DB-0 和 DB-1 的通知。

PS:我知道我可以在我的应用程序中过滤密钥,但是我在 redis 中存储了太多过期的密钥,并且发送所有过期的通知会增加我的 redis 服务器上的负载。

标签: redis

解决方案


我认为您订阅了与所有 DB 通知消息匹配的模式,例如PSUBSCRIBE __key*__:*.

实际上,您可以在订阅模式中指定 db 索引:PSUBSCRIBE __keyspace@0__:*PSUBSCRIBE __keyevent@0__:*. 这样,您只会收到 的通知DB0


推荐阅读