LRU 缓存淘汰策略

LRU 缓存淘汰策略

1、基本介绍
  1. LRU,全称 Least Recently Used,即最近最少使用,它是一种经典的缓存淘汰策略

  2. 当缓存空间满了,需要腾出位置放新数据时,LRU 会优先淘汰那个最久没有被访问过的数据

  3. LRU 通常需要支持如下两种操作,且要求高效,一般是 O(1) 时间复杂度

    访问数据(get)

    复制代码
     如果数据在缓存中,把它标记为最近使用,并移到最前面
    
     如果不在,返回空

    插入数据(put)

    复制代码
     如果数据已存在,更新值并移到最前面
    
     如果不存在,插入到最前面
    
     如果插入后超出容量,删除最后面(最久未使用)的那个数据
  4. 为了在 O(1) 时间内完成查找、插入和删除,LRU 通常结合如下两种数据结构

    哈希表:实现 O(1) 的快速查找,判断某个 key 是否在缓存中

    双向链表:维护访问顺序。链表头部是最近使用的,尾部是最久未使用的。因为需要频繁移动节点,所以用双向链表而不是单链表

2、举例说明
  • 假设缓存容量为 3
  1. 访问 A → 缓存:[A]

  2. 访问 B → 缓存:[B, A]

  3. 访问 C → 缓存:[C, B, A]

  4. 访问 A → A 被移到最前 → 缓存:[A, C, B]

  5. 插入 D → 容量满了,淘汰最久未使用的 B → 缓存:[D, A, C]

3、应用场景
  1. CPU 缓存:利用局部性原理,保留最近使用的内存块

  2. 数据库缓冲池:例如,MySQL 的 InnoDB 缓冲池,用 LRU 的变体来管理内存页

  3. 操作系统页面置换:决定哪些内存页可以被换出

  4. Redis:作为缓存淘汰策略之一

  5. 浏览器 / HTTP 缓存:决定哪些资源保留在本地

4、优缺点
(1)优点
  1. 实现相对简单,命中率在多数场景下表现不错

  2. 符合最近使用过的东西更可能被再次使用的直觉

(2)缺点
  1. 对偶发性的批量操作不友好。例如,一次性扫描大量数据,会把原本的热点数据全部挤出去,导致缓存命中率骤降。这被称为缓存污染

  2. 实际系统中常用改进版,例如,LRU-K、2Q、LFU 等

相关推荐
wuyk5551 小时前
28 搜索引擎索引更新:从 LSM Tree 到布隆过滤器的高效实现
stm32·单片机·嵌入式硬件·算法
一木 之林1 小时前
微信小程序开发全攻略·文章版|01 入门与环境搭建
人工智能·学习·计算机视觉·微信小程序·notepad++
Xudde.1 小时前
Quaoar 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
垆边人似月.1 小时前
华为题:合并区间
数据结构·c++·算法
十年Java程序媛1 小时前
Redis 分布式锁 + GZIP 压缩缓存踩坑|高并发缓存真实线上复盘
java·开发语言·spring boot·redis·分布式·缓存·面试
垆边人似月.2 小时前
华为题:滑动窗口最大值
数据结构·c++·算法
凤山老林2 小时前
Spring Boot 集成 Redis ZSet 实现实时排行榜、动态排名、同分加权与多维度榜单实战
spring boot·redis·后端
遇印记2 小时前
网络安全,数据链路层,物理层
运维·服务器·网络·windows·学习
2601_965742222 小时前
AI是怎么判断一家本地商家值得推荐的?云南老板看完这篇就懂了
大数据·人工智能·算法·ai·新媒体运营