Redis订阅者没有收到过期密钥0的通知



我有一个Redis客户端订阅了__keyevent@0__:expired通知。它可以完美地工作,无论是当密钥本身过期时(ttl达到),还是当我手动过期时,秒数大于0,像这样:

EXPIRE myKey 1

订阅者看到expired事件,因此可以采取一些操作。

但是,如果我想手动删除通知订阅者,我使用EXPIRE, 0作为秒数:
EXPIRE myKey 0

密钥被删除,但订阅者没有收到任何内容。

我在文档中看不到任何与此相关的内容。有人能解释这种行为吗?

通过查看源代码(expire.c, ~252),将过期值设置为<=0(或使用EXPIREAT表示过去的时间)会导致删除密钥而不是过期(因此会发出DEL通知而不是EXPIRED事件)。

这个行为确实没有文档记录,如果你能提交一个PR来修复这个文档(https://github.com/antirez/redis-doc),那就太好了。

最新更新