Redis的键过期策略
Posted chenry777
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis的键过期策略相关的知识,希望对你有一定的参考价值。
摘自官方文档: https://redis.io/commands/expire
过期的键
通常 Redis 密钥是在没有关联的生存时间的情况下创建的。密钥将永远存在,除非用户以明确的方式将其删除,例如使用DEL命令。
该EXPIRE命令的家庭能够联想到的到期给定的关键,在通过按键使用了一些额外的内存成本。当一个键设置了过期时间时,Redis 将确保在指定的时间段过去后删除该键。
可以使用EXPIRE和 PERSIST命令(或其他严格相关的命令)更新或完全删除关键生存时间。
过期精度
在 Redis 2.4 中,expire 可能不是精确的,它可能在 0 到 1 秒之间。
从 Redis 2.6 开始,expire 错误是从 0 到 1 毫秒。
过期和持久性
密钥过期信息存储为绝对 Unix 时间戳(在 Redis 2.6 或更高版本的情况下以毫秒为单位)。这意味着即使 Redis 实例不活动,时间也在流动。
为了使到期工作正常,计算机时间必须保持稳定。如果您从两台计算机中移动一个 RDB 文件,它们的时钟有很大的不同步,可能会发生有趣的事情(例如所有加载的密钥在加载时都会过期)。
即使正在运行的实例也会始终检查计算机时钟,因此例如如果您设置一个生存时间为 1000 秒的密钥,然后将您的计算机时间设置为未来 2000 秒,该密钥将立即过期,而不是持续1000 秒。
Redis 如何使密钥过期
Redis 密钥以两种方式过期:被动方式和主动方式。
当某个客户端尝试访问它时,密钥就会被动地过期,并且发现该密钥已超时。
当然,这还不够,因为存在永远不会再次访问的过期密钥。这些键无论如何都应该过期,因此 Redis 会定期在具有过期设置的键中随机测试一些键。所有已经过期的键都从键空间中删除。
具体来说,Redis 每秒执行 10 次:
1.从具有关联过期的密钥集中测试 20 个随机密钥。
2.删除所有发现过期的密钥。
3.如果超过 25% 的密钥已过期,请从步骤 1 重新开始。
这是一个平凡的概率算法,基本上假设是我们的样本代表整个密钥空间,我们继续过期直到可能过期的密钥百分比低于25%
这意味着在任何给定时刻,使用内存的已过期键的最大数量最大等于每秒最大写入操作数量除以 4。(25%)
以上是关于Redis的键过期策略的主要内容,如果未能解决你的问题,请参考以下文章