当前位置: 首页 > news >正文

缓存设计:从 LRU 到 Redis 实战

摘要缓存是提升系统性能的第一道防线也是面试中系统设计环节的核心话题。本文系统讲解缓存的四大置换策略、LRU 和 LFU 的实现原理并结合 Python 代码展示完整的缓存系统。AI 开发者还将学到 KV Cache 在 LLM 推理中的关键作用。一、为什么需要缓存1.1 缓存的时空权衡是否请求缓存命中?直接返回~1ms查数据库~100ms写入缓存图 1缓存读取流程1.2 缓存的三大问题问题描述解决方案缓存穿透查询不存在的数据绕过缓存直达 DB布隆过滤器、空值缓存缓存击穿热点 key 过期大量请求涌入 DB互斥锁、逻辑过期缓存雪崩大量 key 同时过期随机过期时间、多级缓存二、缓存置换策略2.1 四大经典策略 缓存策略对比 fromtypingimportDict,OptionalfromcollectionsimportOrderedDictimportrandomclassCacheStrategy:缓存策略基类def__init__(self,capacity:int):self.capacitycapacity self.cache{}defget(self,key):raiseNotImplementedErrordefput(self,key,value):raiseNotImplementedErrorclassLRUCacheImpl(CacheStrategy): LRU (Least Recently Used) 缓存 使用 OrderedDict 实现 O(1) 操作 def__init__(self,capacity:int):super().__init__(capacity)self.cacheOrderedDict()defget(self,key):ifkeynotinself.cache:return-1# 移动到末尾最近使用self.cache.move_to_end(key)returnself.cache[key]defput(self,key,value):ifkeyinself.cache:self.cache.move_to_end(key)self.cache[key]valueiflen(self.cache)self.capacity:# 移除最旧的self.cache.popitem(lastFalse)classLFUCacheImpl(CacheStrategy): LFU (Least Frequently Used) 缓存 记录每个 key 的访问频率淘汰使用最少的 def__init__(self,capacity:int):super().__init__(capacity)self.key_to_val{}self.key_to_freq{}self.freq_to_keys{}# 频率 - key 集合self.min_freq0defget(self,key):ifkeynotinself.key_to_val:return-1self._increase_freq(key)returnself.key_to_val[key]defput(self,key,value):ifself.capacity0:returnifkeyinself.key_to_val:self.key_to_val[key]value self._increase_freq(key)returniflen(self.key_to_val)self.capacity:self._evict()self.key_to_val[key]value self.key_to_freq[key]1self.freq_to_keys.setdefault(1,set()).add(key)self.min_freq1def_increase_freq(self,key):freqself.key_to_freq[key]self.key_to_freq[key]freq1self.freq_to_keys[freq].remove(key)ifnotself.freq_to_keys[freq]:delself.freq_to_keys[freq]iffreqself.min_freq:self.min_freq1self.freq_to_keys.setdefault(freq1,set()).add(key)def_evict(self):keysself.freq_to_keys[self.min_freq]key_to_removenext(iter(keys))keys.remove(key_to_remove)ifnotkeys:delself.freq_to_keys[self.min_freq]delself.key_to_val[key_to_remove]delself.key_to_freq[key_to_remove]deftest_caches():print(*60)print(缓存策略测试)print(*60)print(\n【LRU 测试】)lruLRUCacheImpl(2)lru.put(1,10)lru.put(2,20)lru.get(1)lru.put(3,30)# 淘汰 key 2print(f get(1){lru.get(1)}, get(2){lru.get(2)}, get(3){lru.get(3)})print(\n【LFU 测试】)lfuLFUCacheImpl(2)lfu.put(1,10)lfu.put(2,20)lfu.get(1)lfu.get(1)lfu.put(3,30)# 淘汰 key 2使用频率低print(f get(1){lfu.get(1)}, get(2){lfu.get(2)}, get(3){lfu.get(3)})print(\n*60)if__name____main__:test_caches()代码 1LRU 与 LFU 实现三、AI 场景LLM 的 KV Cache3.1 KV Cache 原理在 Transformer 解码过程中每个 token 的注意力计算需要用到之前所有 token 的 Key 和 Value。为了避免重复计算将它们缓存起来输入 Token注意力计算KV Cache输出更新 KV Cache图 2KV Cache 在 Transformer 推理中的作用3.2 KV Cache 管理挑战挑战解决方案内存随序列长度线性增长PagedAttention 分页管理不同请求序列长度不一Continuous Batching长上下文内存爆炸滑动窗口注意力、H2O 重计算四、总结核心要点缓存是性能优化的第一手段用空间换时间LRU 适合时间局部性好的场景大多数 Web 应用LFU 适合频率差异明显的场景热点内容分发AI 推理中 KV Cache 是核心优化点直接决定可服务的并发量。本文基于 Coding Interview University 项目整理专注缓存设计专题。
http://www.gsyq.cn/news/1361599.html

相关文章:

  • AI Agent自主操作软件实战手册(从PoC到生产环境全链路拆解)
  • 收藏!小白程序员必看:用8192维度理解大模型如何生成文字的循环奥秘
  • RAG已死?大模型主动“翻文件”实现精准检索,告别幻觉与低效!附GitHub源码!
  • 【2026最新全网最细】MySQL卸载、下载、安装、配置、使用全流程图文解析、和细节讲解(保姆级教学)
  • MySQL 进阶教程 第一章第二章
  • Go语言命名规范:清晰的命名
  • Go语言接口设计:最小接口原则
  • HTML 零基础入门:从概念到常用标签详解,前端入门超详细版
  • Manim完整指南:如何快速掌握数学动画引擎的终极教程
  • 工厂短视频培训哪个课程靠谱 - 资讯纵览
  • Air1601 LCD屏开发:规格+RGB接口+排线定义 干货汇总
  • BepInEx:如何为Unity和.NET游戏构建可扩展的模组生态系统
  • 文生图测试:没有一个大模型能表达出的幽默感
  • 【紧急预警】Apple Podcasts与Spotify已启动AI语音内容水印识别系统——3步完成合规声纹嵌入(含Python脚本+FFmpeg参数集)
  • 【Web安全】-企业资产信息收集(1):信息收集介绍,域名信息收集,主域名查询,ICP备案号查询,备案实体查询,工业和信息化部政务服务平台查询,怎样收集
  • 从翻车到封神:1个被低估的--no参数+2个隐藏材质关键词,让水面倒影清晰度突破人眼分辨极限
  • AI Agent在金融运维中如何实现99.99%故障自愈?——基于3家头部银行落地数据的深度复盘
  • 从东方修心到 AI 工程:我用 Spring AI 重构了一套七境智能体操作系统
  • AI 算力基础设施、国产 GPU 与算力自主可控之路
  • 大模型核心模块深度解析:算力消耗与适用场景全解析!
  • C166 Class B硬件陷阱解析与调试实战
  • 清远搬厂公司推荐:实惠靠谱、无缝搬家全攻略2026 - 从来都是英雄出少年
  • 【游戏设计】游戏循环的奥秘
  • 网络可观测性:洞察和监控网络流量
  • CNKI-download:3步实现知网文献批量下载与管理的Python自动化工具
  • 宣威龙泉汽修,宣威修车哪家好 - 资讯纵览
  • JDK常用类与工具(速览版)
  • GPS测速仪SpeedView 3.2.0汉化版 精准速度 实时测速工具
  • 独立开发者如何利用 Taotoken 的 Token Plan 套餐以更优成本启动 AI 项目
  • 三步突破原神PC版帧率限制:高性能显卡的终极解放指南