我有一个 Redis 客户端订阅了 __keyevent@0__:expired
通知。它完美地工作,无论是当 key 本身过期(达到 ttl)还是当我手动使它们过期且秒数大于 0 时,如下所示:
EXPIRE myKey 1
订阅者看到 expired
事件,因此可以采取一些行动。
但是,如果我想手动删除 key 并通知订阅者,我使用EXPIRE
,秒数为0 :
EXPIRE myKey 0
key 被删除,但订阅者没有收到任何东西。
我在文档中看不到任何与此相关的内容。谁能解释这种行为?
最佳答案
查看源代码 (expire.c, ~252),设置 <=0 的过期值(或使用过去时间的 EXPIREAT)会导致删除 key 而不是过期(相应地DEL 通知而不是 EXPIRED 事件)。
这种行为确实没有记录在案,如果你能提交一个 PR 来修复这个问题到文档库(https://github.com/antirez/redis-doc),那就太好了。
关于events - EXPIRE 键 0 未通知 Redis 订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40636291/