LRU是什么
缓存命中率是缓存系统的非常重要指标,如果缓存系统的缓存命中率过低,将会导致查询回流到数据库,导致数据库的压力升高。
LRU(Least Recently Used) 即最近最少使用的数据需要被淘汰,属于典型的内存淘汰机制。也就是说,内存中淘汰那些最近最少使用的数据。
LRU算法实现思路
根据LRU算法的理念,我们需要:
一个参数来作为容量阈值
一种数据结构来存储数据,同时希望插入、读取、删除操作的时间复杂度都是O(1)。
所以,我们用到的数据结构是:Hashmap+双向链表。
1.利用hashmap的get、put方法O(1)的时间复杂度,快速取、存数据。
2.利用doublelinkedlist的特征(可以访问到某个节点之前和之后的节点),实现O(1)的新增和删除数据。
如下图所示:
LRU的简单实现
节点node,存放key、val值、前节点、后节点
class Node{
public int key;
public int val;
public Node next;
public Node previous;
public Node() {
}
public Node(int key, int val) {
this.key = key;