Redis版本:2.8.19中是否需要以下行为:

127.0.0.1:6380> set fooxyz 1
OK
127.0.0.1:6380> ttl fooxyz
(integer) -1
127.0.0.1:6380> expire fooxyz 3
(integer) 1
(1.98s)
127.0.0.1:6380> ttl fooxyz
(integer) 0
127.0.0.1:6380> ttl fooxyz
(integer) 0
(0.96s)
127.0.0.1:6380> ttl fooxyz
(integer) 0
127.0.0.1:6380> ttl fooxyz
(integer) 0
127.0.0.1:6380> get fooxyz
"1"

如您所见,我在密钥fooxyz上设置了expire,它达到0,但实际上它从未被删除。过期后,我继续能够检索fooxyz的值。
这是意料之中的吗?它最终会被移除/垃圾收集吗?
根据redis documentation
当某个客户机试图访问密钥时,该密钥就会被主动过期,
发现钥匙超时了。
但在这里我有一个主动尝试检索密钥的例子,它没有过期。

最佳答案

esilver,我无法在v3.2.2中重现您的问题,lazy expire对我很好:

127.0.0.1:6379> set fooxyz 1
OK
127.0.0.1:6379> ttl fooxyz
(integer) -1
127.0.0.1:6379> expire fooxyz 3
(integer) 1
127.0.0.1:6379> ttl fooxyz
(integer) -2
127.0.0.1:6379> get fooxyz
(nil)

10-06 07:20