redis键设置为过期而未实际删除

时间:2016-08-13 23:06:04

标签: redis ttl

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上设置了一个到期,它达到了0,但是它实际上从未被删除过。我可以在过期时间之后检索fooxyz的值。

这是预期的吗?它最终会被删除/垃圾收集吗?

根据redis documentation

  

只有当某个客户端尝试访问密钥时,密钥才会主动过期,   并且钥匙被发现超时。

然而,我在这里有一个主动尝试检索密钥的例子,它没有过期。

1 个答案:

答案 0 :(得分:0)

你说它发生在一个奴隶身上。可能是你在主服务器上有这样一个密钥,SET它在一个从服务器上,EXPIRE它在一个从服务器上,它是否已经过期并从主服务器恢复?

编辑我在4.0.9上使用一个主服务器和一个可写服务器进行了测试,但事实并非如此。从站上的密钥已正确过期,即使没有GET访问权限也会自动删除。您仍可以尝试在您的版本上测试此案例。