我有一个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),那就太好了。