LRU缓存淘汰算法
LRU是(Least Recently Used)最近最少使用策略的缩写,是根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
LRU 算法的核心数据结构就是哈希链表,双向链表和哈希表的结合体。其设计思想:就是借助哈希表赋予了链表快速查找的特性,可以快速查找某个 key 是否存在缓存(链表)中,同时可以快速删除、添加节点。
哈希链表实现LRU
将Cache的所有位置都用双链表连接起来,当一个位置被命中之后,通过调整链表的指向,将该位置调整到链表头/尾的位置,新加入的Cache直接加到链表头/尾中。
这样,在多次进行Cache操作后,最近被命中的,就会被向链表头/尾方向移动,而没有命中的,而向链表尾/头方向移动,链表尾/头则表示最近最少使用的Cache。
当需要替换内容时候,链表的头/尾节点就是最少被命中的位置,我们只需要淘汰链表这部分即可。
LRU算法设计:
package com.wang.redis.lru;
import java.util.LinkedHashMap;
public c