一是内存爆了要用 LRU、LFU、FIFO 清理,否则磁盘SWAP,性能急剧下降
二是超时键过期要删除,用主动或惰性的方法
通用过期策略
-
定时过期:
每个设置过expire时间的key都要创建一个定时器,到期立即清除
该策略可以立即清除过期的数据,对内存很友好
但占用大量CPU资源处理过期数据,从而影响响应时间和吞吐量
-
惰性过期:
访问key才会判断该key是否已过期,过期则清除
该策略可最大化节省CPU资源,却对内存非常不友好
极端情况可能出现大量过期key没有再次被访问,而不会被清除,占用大量内存
-
定期过期:
每隔一定的时间,扫描一定数量expires字典中一定数量的key,并清除其中已过期的key
该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可在不同情况下使CPU和内存资源达到最优的平衡效果
(expires字典,key指向键的指针,value是该键的毫秒精度UNIX时间戳)
Redis同时使用惰性过期和定期过期两种