LRU算法:
1.用一个一个有界的双向队列存储数据,队首插入数据,队尾淘汰数据
2.队列满了,可以继续往队头插入数据,为了保持队列的容量,淘汰队尾的元素
2.读取队列的一个元素,就把这个元素移动到队头。这样就实现了队尾始终是访问频率相对其他元素降低的元素,队头是访问频率高的元素
简单Redisson实现:
public class LRURedisDequeue<E> extends Thread {
private static final RedissonClient redissonClient;
private LinkedBlockingQueue<E> data = new LinkedBlockingQueue<>();
private final RDeque<E> deque;
private final int capacity;
private AtomicInteger count;
private final String name;
static {
redissonClient = ApplicationContextBeanGetter.getBean(RedissonClient.class);
}
public LRURedisDequeue(String name, int max){
this.name = name;
deque = redissonClient.getDeque(name);
this.capacity = max;
//初始化count
RMap<String,Integer> map = redissonClient.getMap(