算法类型:
volatile-lru :设置了过期时间的key使用LRU算法淘汰;
allkeys-lru :所有key使用LRU算法淘汰;
volatile-lfu :设置了过期时间的key使用LFU算法淘汰;
allkeys-lfu :所有key使用LFU算法淘汰;
volatile-random :设置了过期时间的key使用随机淘汰;
allkeys-random :所有key使用随机淘汰;
LRU算法(least recently use)
一组数据中,对最近没有使用或者使用距离目前时间最久远的数据进行删除淘汰:
核心思想: 如果一个数据最近有被访问到,在未来其很大概率也可能被访问到;
缺点: 如果一个热点数据,和一个冷门数据,热点数据以前被访问很多次,最近冷门数据被访问了,而热门数据有一段时间没有被访问,按照lru算法来看,会把热点数据删掉,这明显不合理
LRU算法的常见实现方式为链表:
新数据放在链表头部 ,链表中的数据被访问就移动到链头,链表满的时候从链表尾部移出数据。
LFU算法(least frequently used)
频繁使用的保留,使用次数最少的删除,表示最不经常使用,它是根据数据的历史访问频率来淘汰数据list的每个节点维护一个使用次数
核心思想: 如果数据过去被访问多次,那么将来被访问的频率也更高
LFU算法反映了一个key的热度情况,不会因LRU算法的偶尔一次被访问被误认为是热点数据。
LFU算法的常见实现方式为链表:
新数据放在链表尾部 ,链表中的数据按照被访问次数降序排列,访问次数相同的按最近访问时间降序排列,链表满的时候从链表尾部移出数据。
总结:
LRU: 优先淘汰时间距离现在最久远的key
LFU: 优先淘汰使用次数最少的key