LRU (Least Recently Used 最近最少使用)
不断将最近使用的对象放到列表的顶部,这样最近最少使用的对象就会慢慢沉到底部,当容量不足的时候,可以将底部的对象去除,以留出空间给新的对象。
LRU-2
LRU-2算法是LRU算法的一个优化算法。LRU会将最近访问过的对象放置到顶部,但是有时候一次访问不能代表缓存之后会被继续访问,所以后来增加了一个阈值,当访问达到一定次数之后才会加入到缓存列表的顶部。未达到阈值的对象会暂时缓存在另外一张表中,基于LRU算法更新。阀值可以设置为2,3,4等等,但是通过实践后发现阀值设置为2有更好的适用性,所以一般都使用2作为阀值
FIFO(First In First Out 先进先出)
FIFO是将管理一个缓存列表,将先生成的缓存放在前面,最近生成的缓存放在列表的后面。当缓存空间满的时候,将最早生成的缓存去除。该算法很简单,但是缓存效果不好。
LFU(Least Frequently Used 最不经常使用)
LFU是给每个缓存对象设置一个缓存频率,当缓存空间不足时,将最少使用的缓存对象去除。当遇到某些缓存对象之前历史上使用频率很高,但是之后不再使用时,这种算法会导致没有价值的缓存长期在缓存中驻留,导致实际可用的缓存空间减少。
RAND(Random Algorithm)
当缓存空间不足时,系统通过一个随机值删除缓存空间中的随机一个缓存对象。这种算法也是比较简单的,但是命中率很低。
OPT(Optimal Replacement Algorithm 最优替换)
当缓存空间不足时,系统将未来最不可能被使用的缓存对象除去。这是最好的算法,唯一的缺点是无法实现。
参考文档: