Redis key已经过期但未删除,后端可以获取到key-value

设置了一个key 过期时间为300s,但是五分钟后还是可以获取到key。

通过keys *查看没有key存在,但是可视化界面后面又有记录存在但是打不开db0。使用指令删除redis中的所有key,重新测试时发现设置了过期时间的key ttl一直减少直到变成0,然后刷新。发现又打不开db0了,问题就出现在这里

 

Redis的key,通过TTL命令返回key的过期时间,一般来说有3中:

  1. 当前key没有设置过期时间,所以会返回-1.

  2. 当前key有设置过期时间,而且key已经过期,所以会返回-2.

  3. 当前key有设置过期时间,且key还没有过期,故会返回key的正常

如果一个redis作为slave,且将slave-read-only设置为off,并写入了一个带有TTL的key时,当key过期后,该key是不会被Redis删除的,且TTL在过期后永远为0。

带着这样的判断,我们在该redis上执行info命令确认了一下,果然该redis是slave,咨询了相关部署的同事得知,该业务在进行数据迁移过程中,存在多级复制和双写的情况,所以才将redis slave设置为可写状态,此时将slave的slaveof 设置成no one,既断开同步,再次排查所有过期key的TTL都返回-2了。

链接:一次Redis TTL 为0的问题排查_hongmingover的博客-CSDN博客_redis ttl 为0

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐