我的redis键不会过期

use*_*446 14 ttl redis cache-expiration

当生存时间达到0时,我的redis服务器不会删除密钥.

这是一个示例代码:

redis-cli
>SET mykey "ismykey"
>EXPIRE mykey 20
#check TTL
>TTL mykey
>(integer) 17
> ...
>TTL mykey
>(integer) -1
#mykey chould have expired:
>EXISTS mykey
>(integer) 1
>#oh still there, check its value
>GET mykey
>"ismykey"
Run Code Online (Sandbox Code Playgroud)

如果我通过redis检查信息返回,则表示0个密钥已过期.

任何的想法?

谢谢.

Joa*_*son 21

因为你正在做'...',所以很难肯定,但我会说你在那部分设置了mykey,这将有效地消除过期.

从EXPIRE手册

仅当使用DEL命令删除密钥或使用SET或GETSET命令覆盖密钥时,才会清除超时

另外,关于来自TTL的-1回复

返回值

整数回复:TTL以秒为单位,当密钥不存在或没有超时时为-1.

编辑:请注意在Redis 2.8中此行为已更改

从Redis 2.8开始,如果错误发生更改,则返回值:
如果该键不存在,则返回-2.
如果密钥存在但没有关联的到期,则该命令返回-1.

换句话说,如果您的密钥存在,它似乎是持久的,即没有任何到期设置.

编辑:似乎我可以重现这个,如果我在REDIS从服务器上创建密钥,从服务器将不会删除没有主输入的密钥,因为通常你不会在从站本地创建密钥.这是这种情况吗?

然而,虽然连接到主服务器的从服务器不会独立地使密钥过期(但是会等待来自主服务器的DEL),但它们仍将采用数据集中存在的过期的完整状态,因此当从属服务器被选为掌握它将能够独立地使密钥到期,充分充当主人.