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

Redis密钥空间通知到期未触发,redis,Redis,我正在看这一页: 我在配置文件中设置了以下行: notify-keyspace-events "Kx" 当我执行此操作(然后运行最终使某些密钥过期的应用程序)时,我看不到任何事件: redis-cli --csv psubscribe '__keyspace*__:*expire*' 但是,当我将配置设置为: notify-keyspace-events "Kg" 然后运行相同的app和redis cli命令,我确实看到了事件: "pmessage","__keyspace*__:*exp

我正在看这一页:

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

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”事件,并且它在我通知通用命令时(并且仅在通知通用命令时)始终会看到它们。这对我的应用来说太健谈了;我只是想看看


感谢您的帮助。谢谢

您订阅了错误的频道

有两种通知:

  • 密钥空间通知:频道为
    __keyspace@__:
  • 关键事件通知:频道为
    __keyevent@__:
如果要获取所有过期密钥通知,有两种选择:

使用密钥空间通知
  • 启用密钥空间通知:
    config set notify keyspace events Kx

  • 订阅频道:
    psubscribe\uuuu键空间@*\uuuuu::

  • 使用密钥事件通知
  • 启用密钥事件通知:
    config set notify keyspace events Ex

  • 订阅频道:
    psubscribe\uuuu keyevent@*\uuuuuu:expired

  • 您需要订阅“
    __keyevent@0__:过期
    “而不是”
    __keyevent@0__:过期


    请参阅本文件。我也面临同样的问题。我尝试了这个链接的解决方案,它成功了

    我很好奇当你做
    AK
    @Thymine IIRC时会发生什么我今天早些时候试过了。它起作用了,但是非常健谈。谢谢。我确实“通知密钥空间事件Kx”(根据文档),但我没有看到任何内容。正如我在回答中提到的,您订阅了错误的频道。你应该
    psubscribe\uuuuuuuuuuuuuuuuuuuuuuuuuu键空间@*.
    Ah。我看到了区别。所以我想我的问题是:当我加上“g”时,它起作用了。通用的“expire”与“x”捕获的expire不同吗?如果不是,我不明白为什么完全相同的psubscribe在我添加g时才看到“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"