1. LRU缓存算法基础解析
第一次听说LRU这个词是在五年前的一个线上事故复盘会上。当时我们的订单系统突然出现性能断崖式下跌,排查后发现是缓存策略不当导致的热点数据被频繁淘汰。技术总监指着监控图说:"这里就该用LRU,简单粗暴但有效"。那天之后,我花了整整一周时间吃透了这个看似简单却暗藏玄机的算法。
LRU(Least Recently Used) 的核心思想就像图书馆的书架管理:最近被借阅的书放在最显眼的位置,长期无人问津的书会被移到角落,当书架放满时,首先清理那些积灰最厚的旧书。这种策略基于计算机科学中著名的"时间局部性原理"——如果一个数据最近被访问过,那么它短期内再次被访问的概率很高。
实现LRU最经典的方式是哈希表+双向链表的组合拳。我把它比喻成博物馆的导览系统:哈希表相当于展品索引目录(快速定位),双向链表则是参观路线图(记录访问顺序)。下面这个Java实现是我在多个项目中验证过的稳定版本:
public class LRUCache {
class DLinkedNode {
int key;
int value;
DLinkedNode prev;
DLinkedNode next;
}
private Map<Integer, DLinkedNode> cache = new HashMap<>();
private int size;
private int capacity;
private DLinkedNode head, tail;
public LRUCache(int capacity) {
this.size = 0;
this.capacity = capacity;
head = new DLinkedNode();
tail = new DLinkedNode();
head.next = ta



被折叠的 条评论
为什么被折叠?



