Redis专栏-Key的过期策略
Comment前言
Redis可以通过expire
/pexpire
给每个Key设置不同的生存时间,超时到期后,Key将自动删除。
只有删除
或覆盖
等相关命令才能清除这个超时设置,如:del
、 set
。当然,也可以通过persist
命令移除Key的expire设置,将Key重新设置为永久有效。
Redis还提供了rename
命令,可以将Key修改为其他名称,不过,这个操作仍然不会影响expire
的设置。
过期信息的存储
Key过期信息是存储的Unix绝对时间戳
(版本>=2.6以毫秒
为单位),
所以,过期时间的值与Redis服务是否在运行没有直接关系,与机器的系统时间有的直接关系,因为时间不会因为服务停止而停止向前。
这个机制也存在一个问题,如果你迁移RDB文件到其他的服务器上,而这两台服务器的系统时间相差较大,那么就会导致Key提前到期,或延迟到期。
过期密钥的方式
Redis的Key有两种过期方式:
- 被动方式
- 主动方式
触发过期的时机
1,被动方式:
仅当客户端尝试访问Key时,Key才会检测失效时间,从而被动失效。
2,主动方式:
因为有的Key可能永远不会再次访问,所以被动方式显然不能满足。
因此Redis会定期对具有设置了expire
的Key,进行随机的检测,检测到失效,就直接删除失效Key。
具体实现逻辑:
1 | Redis 每秒执行10次 的随机检测操作: |
注:这个实现逻辑是一个概率算法,它假设我们随机取的这一组样本,可以代表整个Redis空间,持续不断的检测,直到可能过期的Key所占百分比低于25%。
- 本文作者:沙果栗子本文链接:https://32e.co/2020/10/01/redis-expire/版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!