Redis密钥空间通知到期未触发



我正在查看此页面:https://redis.io/topics/notifications

我在配置文件中设置了以下行:

notify-keyspace-events "Kx"

当我这样做(然后运行我的应用程序,最终使一些密钥过期(时,我看不到任何事件:

redis-cli --csv psubscribe '__keyspace*__:*expire*'

然而,当我将配置设置为:

notify-keyspace-events "Kg"

然后运行相同的应用程序和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只查找"过期"事件,并且它在我通知通用命令时(并且只有在我通知泛型命令时(始终会看到它们。这对我的应用程序来说太健谈了;我只想看到过期。

感谢您的帮助。谢谢

您订阅了错误的频道。

有两种通知:

  • 密钥空间通知:通道为__keyspace@<db>__:<key>
  • 关键事件通知:通道为__keyevent@<db>__:<event>

如果你想获得所有过期的密钥通知,你有两个选择:

使用密钥空间通知

  1. 启用密钥空间通知:config set notify-keyspace-events Kx

  2. 订阅频道:psubscribe __keyspace@*__:*

使用密钥事件通知

  1. 启用密钥事件通知:config set notify-keyspace-events Ex

  2. 订阅频道:psubscribe __keyevent@*__:expired

您需要订阅"CCD_ 7";而不是";CCD_ 8";

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

最新更新