当前位置: 首页 > 面试题库 >

我的Redis密钥没有过期

司徒兴德
2023-03-14
问题内容

当生存时间达到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(如果密钥不存在或没有超时)。

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

从Redis 2.8开始,
如果更改了错误,则返回值:如果键不存在,则命令返回-2。
如果密钥存在但没有关联的过期时间,则命令返回-1。

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

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

但是,虽然连接到主服务器的从服务器不会独立使密钥失效(而是等待来自主服务器的DEL),但它们仍将处于数据集中存在的失效的完整状态,因此当从服务器被选为主人,它将能够独立使密钥失效,从而完全充当主人。



 类似资料:
  • 代码段 我使用redis-cli工具检查了密钥的可用性 钥匙* 而且 ttl密钥名 redis.conf具有默认值。 有什么建议吗? 编辑1: 完整代码: 功能在一个方面 当这些线路运行时 RedisAtomicInteger计数器=计数器=新RedisAtomicInteger(“MyKey”);Counter.Expire(1,TimeUnit.Minutes); 我能看见 在Redis日志中

  • 在这个expire方法中,我们需要提供而不是。但是我需要过期而不是。 那么,请帮助我如何处理过期?

  • 问题内容: 当我的密钥在Redis数据存储区中过期时,我正在尝试使用Redis实施过期密钥通知。redis网站提供了一些有关http://redis.io/topics/notifications的描述,但是我无法找到任何示例,例如使用Jedis的redis java客户端如何做到这一点? 任何可能的带有插图的代码都将非常有用,因为它们是redis的新功能。 问题答案: 您只能使用 pub-sub

  • 当我的密钥在redis数据存储中过期时,我试图用redis实现过期密钥通知。redis网站提供了一些如何http://redis.io/topics/notifications,但我找不到任何像Jedis这样使用redis java客户端的例子? 任何可能的带有插图的代码都会非常有用,因为我是redis的新手。

  • 问题内容: 当我的Redis存储区中的易失性密钥过期时,我想收到通知。redis网站在http://redis.io/topics/notifications中提供了一些有关如何实现此目标的描述,但我想知道是否可以使用python redis api来完成。 设置后:在我的redis.conf文件中 并进行测试: 仅在被调用时被调用,但没有按预期在五秒钟后被调用 问题答案: 惊喜(当密钥的生存时间

  • 当我的redis存储中的易失性密钥过期时,我希望得到通知。redis网站提供了一些关于如何在http://redis.io/topics/notifications中实现这一点的描述,但我想知道是否可以使用python redis api来完成。 设置后: 并将其作为测试运行: 只有在被调用时才被调用,但没有像预期的那样晚五秒钟