redis会将每个设置过期时间的key放到一个独立的字典中,以后会定时遍历这个字典来删除到期的key。
除了使用定时遍历之外,还会使用惰性删除,即访问的时候检查key是否过期,如果过期了则删除。
通过2种策略配合使用,Redis能保持高吞吐量和避免内存浪费。
一、定时删除
Redis每秒进行10次(可以修改redis.conf 里的 hz参数)扫描一次过期字典,并不是遍历所有的key。
- 从过期字段中随机选择20个key
- 删除这20个key中已经过期的key
- 如果过期的key比例超过1/4,则重复步骤1
同时,避免同一段时间大量key过期,循环时间太久,算法还增加了扫描时间上限,默认是不超过25ms。
二、惰性删除
定时删除策略中,从删除方法来看,必然会导致有key过期了但未从redis中删除的情况。
面对这种情况,redis在操作一个key时,会先判断这个值是否过期,若已过期,则删除该key;若未过期,则进行后续操作。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏