我的redis键不会过期

时间:2012-08-07 15:26:30

标签: redis ttl 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"

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

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:21)

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

From the EXPIRE manual

  

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

Also, regarding the -1 reply from TTL

  

返回值

     

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

编辑:请注意,此行为在Redis 2.8

中已更改
  

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

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

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

  

但是,连接到主服务器的从服务器不会使密钥过期   独立(但将等待来自主人的DEL),   他们仍将采取现有的到期状态   数据集,所以当奴隶被选为主人时,它将能够   独立到期,完全充当主人。