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

Les*_*bel 2 redis

我在看这个页面:https : //redis.io/topics/notifications

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

notify-keyspace-events "Kx"
Run Code Online (Sandbox Code Playgroud)

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

redis-cli --csv psubscribe '__keyspace*__:*expire*'
Run Code Online (Sandbox Code Playgroud)

但是,当我将配置设置为:

notify-keyspace-events "Kg"
Run Code Online (Sandbox Code Playgroud)

然后运行相同的应用程序和 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"
Run Code Online (Sandbox Code Playgroud)

我知道当 TTL 已过时,到期不一定会发生。但我不确定这能解释我所看到的——我的 redis-cli 只查找“过期”事件,并且在我通知通用命令时(并且仅当)它始终会看到它们。这对我的应用来说太健谈了;我只想看过期。

任何帮助表示赞赏。谢谢!

for*_*ack 8

您订阅了错误的频道。

有两种通知:

  • 键空间通知:通道是__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