我正在看这个页面:https://redis.io/topics/notifications
我在配置文件中设置了以下行:
notify-keyspace-events "Kx"当我这样做时(然后运行我的应用程序,它最终会使一些密钥过期),我看不到任何事件:
redis-cli --csv psubscribe '__keyspace*__:*expire*'但是,当我将我的配置设置为:
notify-keyspace-events "Kg"然后运行相同的app和redis-cli命令,我确实看到了事件:
"pmessage","__keyspace*__:*expire*","__keyspace@0__:spring:session:wca:sessions:expires:9d73fefc-459d-4bf4-83ef-b8fcbf06b997","expire"
"pmessage","__keyspace*__:*expire*","__keyspace@0__:spring:session:wca:sessions:expires:9d73fefc-459d-4bf4-83ef-b8fcbf06b997","expire"
"pmessage","__keyspace*__:*expire*","__keyspace@0__:spring:session:idp:sessions:expires:52dbe449-4616-41ef-bfa6-1d7a16a89f8a","expire"
"pmessage","__keyspace*__:*expire*","__keyspace@0__:spring:session:idp:sessions:expires:52dbe449-4616-41ef-bfa6-1d7a16a89f8a","expire"
"pmessage","__keyspace*__:*expire*","__keyspace@0__:spring:session:idp:sessions:expires:52dbe449-4616-41ef-bfa6-1d7a16a89f8a","expire"
"pmessage","__keyspace*__:*expire*","__keyspace@0__:spring:session:idp:sessions:expires:52dbe449-4616-41ef-bfa6-1d7a16a89f8a","expire"我知道过期并不一定发生在TTL过期之后。但我不确定这是否能解释我所看到的情况--我的redis-cli只查找"expire“事件,并且在我通知泛型命令时(且仅当我通知泛型命令时),它才会始终看到这些事件。对于我的应用程序来说,这太夸张了;我只想看到过期。
任何帮助都是非常感谢的。谢谢!
发布于 2018-07-26 15:59:14
您订阅了错误的频道。
有两种通知:
__keyspace@<db>__:<key>__keyevent@<db>__:<event>如果您想获得所有过期的密钥通知,您有两个选择:
使用键空间通知
通道启用密钥空间通知:config set notify-keyspace-events Kx
psubscribe __keyspace@*__:*使用按键事件通知
启用按键事件通知:config set notify-keyspace-events Ex
psubscribe __keyevent@*__:expired发布于 2020-08-11 21:38:42
您需要订阅"__keyevent@0__:expired“而不是"__keyevent@0__:expire”
127.0.0.1:6379> subscribe __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "__keyevent@0__:expired"
3) (integer) 1
1) "message"
2) "__keyevent@0__:expired"
3) "mykey"请参阅此文档。我也面临着同样的问题。我尝试了这个链接的解决方案,它在https://github.com/redis/redis/issues/1855中起作用
https://stackoverflow.com/questions/51526243
复制相似问题