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的值。
这是预期的吗?它最终会被删除/垃圾收集吗?
只有当某个客户端尝试访问密钥时,密钥才会主动过期, 并且钥匙被发现超时。
然而,我在这里有一个主动尝试检索密钥的例子,它没有过期。
答案 0 :(得分:0)
你说它发生在一个奴隶身上。可能是你在主服务器上有这样一个密钥,SET
它在一个从服务器上,EXPIRE
它在一个从服务器上,它是否已经过期并从主服务器恢复?
编辑我在4.0.9上使用一个主服务器和一个可写服务器进行了测试,但事实并非如此。从站上的密钥已正确过期,即使没有GET
访问权限也会自动删除。您仍可以尝试在您的版本上测试此案例。