缓存淘汰策略

缓存淘汰常见几种策略:

1.FIFO(First In First Out)

若是一个数据最早进入缓存中,则应该最先淘汰掉算法

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

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

2. LFU(Least Frequently Used)

最不常常使用,若是一个数据在最近一段时间内使用次数不多,那么在未来一段时间内被使用的可能性也很小spa

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

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

3. LRU(Least Recently Used)

最近最少使用,若是数据最近被访问过,那么未来被访问的概率也更高队列

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

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

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