07----------过期策略

Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除。

1.定期检查:edis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定时遍历这个字典来删除到期的 key

2.惰性策略:在客户端访问这个 key 的时候,redis 对 key 的过期时间进行检查,如果过期了就立即删除

定时删除是集中处理,惰性删除是零散处理。

Redis 默认会每秒进行十次过期扫描,过期扫描不会遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。 从过期字典中随机 20 个 key; 删除这 20 个 key 中已经过期的 key; 如果过期的 key 比率超过 1/4,那就重复步骤 1; 同时,为了保证过期扫描不会出现循环过度,导致线程卡死现象,算法还增加了扫描时间的上限,默认不会超过 25ms。

因此,若是有大量的key需要设置过期,需要给过期时间设置一个随机范围

 # 在目标过期时间上增加一天的随机时间

redis.expire_at(key, random.randint(86400) + expire_ts)

从库的过期策略

从库不会进行过期扫描,从库对过期的处理是被动的。主库在 key 到期时,会在 AOF 文件里增加一条 del 指令,同步到所有的从库,从库通过执行这条 del 指令来删除过期的 key。 因为指令同步是异步进行的,所以主库过期的 key 的 del 指令没有及时同步到从库的话,会出现主从数据的不一致,主库没有的数据在从库里还存在,比如上一节的集群环境分布式锁的算法漏洞就是因为这个同步延迟产生的。... https://juejin.im 掘金 — 一个帮助开发者成长的社区

你可能感兴趣的:(redis)