`
powersoft
  • 浏览: 194993 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
53a63413-d61c-321e-8dc6-5008e88923c6
Redis官方文档翻译和源...
浏览量:187903
社区版块
存档分类
最新评论

Redis官方文档(9) ——Redis过期时间

阅读更多
Redis3官方文档(9)
——Redis过期时间


    带过期时间的键(Keys with an expire)
    正常情况下Redis键创建时没有关联一个存活时间。键会永远存活,除非被用户显式地删除,例如,使用DEL命令。
    EXPIRE命令家族可以关联一个过期时间给指定的键,代价是键需要使用额外的内存。当键设置了过期时间,Redis会确保当指定的时间过去以后会删除这个键。
    键的生存时间可以使用EXPIRE和PERSIST命令(或者其他更相关的命令)被更新或者完全删除。

    过期时间的精度(Expire accuracy)
    在Redis 2.4版本中,过期时间可能并不是很精确,大概有0到1秒的误差。
    从Redis 2.6开始,过期时间误差为0到1毫秒。

    过期和持久(Expires and persistence)
    键的过期时间信息是作为绝对的Unix时间戳存储的(Redis 2.6及以上版本存储的是毫秒)。这意味着,即使Redis实例还没有激活时时间就已经在开始流逝了。
    为了让过期时间转转良好,计算机的时间必须稳定。如果你在两台时钟有很大延迟的计算机间移动一个RDB文件,有意思的事情就会发生(像是所有被加载的键在加载时就已经过期了)。
    即使运行的实例一直检查计算机的时钟,例如,如果你设置一个键的生存时间为1000秒,然后设置你的计算机时间为未来2000秒,那么键会立即过期而不是持续存在1000秒。

    Redis如何使键过期(How Redis expires keys)
    Redis的键以两种方式过期:被动方式和主动方式。
    一个键在当某个客户端试图访问它并发现其已经超时时就会主动的过期。
    当然这还不足够,因为有一些过期的键可能永远不会被访问到。这些键无论如何已经过期,所以Redis周期性地在被设置了过期时间的键中随机的测试其中一些键。所有已经过期的键将从键空间被删除。
    特别地,下面是Redis每秒执行10次的动作:
  1. 测试关联了过期时间的键集合中的20个随机键。
  2. 删除所有被发现过期的键。
  3. 如果超过25%的键过期,从步骤1开始。

    这是一个简单的概率性算法,基本上我们的假定是,我们的采样代表了整个键空间,我们不断的过期直到那些可能过期的键的百分比低于25%。
    这意味着,在任何给定时刻,已经过期的键的最大数量占用的内存等于每秒写操作的最大数量除以4。

    复制和AOF文件如何处理过期时间(How expires are handled in the replication link and AOF file)
    为了不牺牲一致性并获取正确的行为,当一个键过期了,一个DEL操作将会同步到AOF文件和所有关联的从服务器。这种方式过期的处理集中的主服务器实例,没有发生一致性错误的机会。
    但是,虽然连接到主服务器的从服务器不会独立地使键过期(但是会等待从主服务器来的DEL操作),但是它们会保持数据库中的完整的过期状态,所以当一台从服务器被选举为主服务器时,它可以独立的使这些键过期,完全充当一台主服务器。
===============================================================================
    大家好,我是阮威。华中科技大学,计算机软件专业硕士。毕业后加入腾讯,先后在腾讯电子商务部和无线游戏产品部工作,现供职于欢聚时代基础产品部。IT男,至今。欢迎大家收听我的公众账号。
3
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics