常用缓存策略
常用的缓存淘汰策略有以下
- 先进先出算法(FIFO)
- Least Frequently Used(LFU)
淘汰一定时期内被访问次数最少的页面,以次数作为参考 - Least Recently Used(LRU)
淘汰最长时间未被使用的页面,以时间作为参考
这些算法在不同层次的缓存上执行时拥有不同的效率和代价,需根据具体场合选择最合适的一种。
FIFO
FIFO(First in First out),先进先出。在FIFO Cache设计中,核心原则就是:如果一个数据最先进入缓存中,则应该最早淘汰掉。
LFU

LRU

Two queues(2Q)
2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列。当数据第一次访问时,2Q算法将数据缓存在FIFO队列里面,当数据第二次被访问时,则将数据从FIFO队列移到LRU队列里面,两个队列各自按照自己的方法淘汰数据。详细实现如下:

- 新访问的数据插入到FIFO队列;
- 如果数据在FIFO队列中一直没有被再次访问,则最终按照FIFO规则淘汰;
- 如果数据在FIFO队列中被再次访问,则将数据移到LRU队列头部;
- 如果数据在LRU队列再次被访问,则将数据移到LRU队列头部;
- LRU队列淘汰末尾的数据。
周期性的批量操作,会立即淘汰LRU队列中的大量数据,导致缓存命中率大幅度下降。而APP常规操作中,有大量偶发批量操作,比如:进入页面后立即返回,就是很典型的一种。
所以LRU算法并不是一个非常好的选择。
转自:https://www.cnblogs.com/zhangfengshi/p/11466263.html
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178722.html原文链接:https://javaforall.net
