标准 LRU 只解决“容量满了淘汰谁”的问题,但一旦再加上访问超时过期,题目就从简单数据结构变成了“容量淘汰加时间淘汰”的组合设计。
先把两个淘汰条件拆开
容量淘汰关注的是最近最少使用,时间淘汰关注的是多久没人访问。只有先把这两个维度分清,设计才不会混乱。
空间淘汰通常可以靠有序结构处理
像 LinkedHashMap 这种带访问顺序的结构,很适合处理最近访问移动到尾部、超容量淘汰头部的需求,核心是把访问顺序维护好。
时间淘汰要考虑清理时机
过期可以在读写时顺手清理,也可以靠后台定时任务清理。前者实现简单,后者更适合减少单次请求抖动,但都要明确复杂度代价。
并发场景别只盯着功能正确
如果题目带多线程,锁粒度、清理冲突和过期判断一致性都要考虑。能主动提到这些问题,通常比只写出单线程版本更加分。
结论
设计带过期时间的 LRU 缓存时,先拆清容量淘汰和时间淘汰,再决定各自的数据结构和清理策略,思路会更清楚。
正文完




