当生存时间达到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个密钥已过期。
任何想法?
谢谢。
由于您正在执行“ …”,因此很难确定,但是我要说的是您在该部分设置了mykey,这将有效地消除过期。
从EXPIRE手册
仅当使用DEL命令删除密钥或使用SET或GETSET命令覆盖密钥时,才清除超时
另外,关于TTL的-1答复
返回值 整数回复:TTL(秒)或-1(如果密钥不存在或没有超时)。
返回值
整数回复:TTL(秒)或-1(如果密钥不存在或没有超时)。
编辑:请注意,此行为在Redis 2.8中已更改
从Redis 2.8开始, 如果更改了错误,则返回值:如果键不存在,则命令返回-2。 如果密钥存在但没有关联的过期时间,则命令返回-1。
换句话说,如果您的密钥存在,那么它似乎是持久的,即没有任何过期设置。
编辑:如果我在REDIS从属服务器上创建密钥,似乎可以重现,没有主输入的情况下从属将不会删除密钥,因为通常您不会在从属本地创建密钥。这是这种情况吗?
但是,虽然连接到主服务器的从服务器不会独立使密钥失效(而是等待来自主服务器的DEL),但它们仍将处于数据集中存在的失效的完整状态,因此当从服务器被选为主人,它将能够独立使密钥失效,从而完全充当主人。