Redis过期删除策略
什么是redis过期删除策略
Redis的key是可以设置过期时间的,删除已经过期的key的策略就是过期删除策略。每当我们设置了个带过期时间的key,Redis就会把这个key加上一个过期时间存在过期字典里面,当我们查询key时,Redis会先检查这个key在不在过期字典里面,如果不在,就正常读取val,如果在,就要进行过期时间比对,查看其是否过期。
redis的过期删除策略
定期删除定期删除策略的做法是,每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查,并删除其中的过期key。具体流程:
从过期字典中随机抽20个key
检查这些key有没有过期,并删除已过期的key
如果本轮检查的已经过期的key的数量超过5个(25%)就重复抽取,否则就停止抽取等待下一轮检查。
优点是减少过期key对空间的占用,缺点是执行太频繁对CPU时间非常不友好。
惰性删除惰性删除策略的做法是,不主动删除过期键,每次从数据库访问 key 时,都检测 key 是否过期,如果过期则删除该 key。
优点是占用很少系统资源,对CPU友好,缺点是过期key对空间占用多。
定时删除定时删除策略的做法是,在设置 key 的过期时间时,同时创建一个定时事件,当时间到达时,由事件处理器自动执行 key 的删除操作。
优点是对内存非常友好,过期的key会尽快被删除,缺点是对CPU非常不友好
Redis的过期删除策略即针对两种方法进行了综合,选择了「惰性删除+定时删除」的策略,以求在合理使用CPU时间和避免内存浪费之间取得平衡。