缓存淘汰策略

292 阅读2分钟

缓存淘汰常见几种策略:

1.FIFO(First In First Out)

如果一个数据最先进入缓存中,则应该最早淘汰掉

实现思路也是很简单的, 套用消息队列思路, 每次新生成缓存标记放到队列尾部, 优先淘汰队列头部的数据.

优点: 实现简单, 耗费资源少 缺点: 根据加入时间越早越淘汰, 如果属于热门数据, 将被反复淘汰、加入, 降低缓存命中率

2. LFU(Least Frequently Used)

最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小

这种方式解决了 FIFO 模式的对于热门数据的劣势, 在实现上按照访问次数进行排列, 需要维护每个记录的访问次数.

优点: 大部分场景提高缓存命中率 劣势: 实现上内存消耗大, 某些场景例如秒杀数据, 短时期内访问数增长奇高, 但之后没有访问, 但根据此算法很难短时间内过期.

3. LRU(Least Recently Used)

最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高

相对于仅考虑时间因素的 FIFO 和仅考虑访问频率的 LFU,LRU 算法可以认为是相对平衡的一种淘汰算法

实现方式也很简单, 维护一个队列, 如果某条记录被访问了,则移动到队尾,那么队首则是最近最少访问的数据,淘汰该条记录即可

优点: 实现简单, 解决了 FIFO 模式的一成不变也解决了 LFU 内存消耗、过期问题 缺点: 特殊场景下, 比如偶发现批量访问非热点缓存, 有导致热点数据被移除风险.