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

Python中缓存入门实战之核心概念与用法详解

缓存是提升程序性能的关键技术——将频繁访问的「计算结果/数据」临时存储在高速介质如内存中避免重复计算/重复查询如数据库、API从而大幅降低响应时间。以下是 Python 缓存的入门指南涵盖核心概念、常用实现方式和实战案例。一、缓存的核心概念1. 核心目标减少「高耗时操作」的执行次数如数据库查询、复杂计算、网络请求用空间换时间。2. 关键术语缓存键Key唯一标识缓存数据的索引如函数参数、请求URL缓存值Value存储的目标数据如查询结果、计算结果过期时间TTL缓存数据的有效期避免数据过期缓存失效缓存数据与源数据不一致需设计失效策略如过期、更新后主动删除缓存命中率命中缓存的请求数 / 总请求数越高性能越好。3. 适用场景频繁调用的纯函数输入固定则输出固定数据库/Redis/API 等外部资源的重复查询复杂计算如数据统计、机器学习模型推理Web 服务的接口响应如接口返回的静态数据。二、Python 缓存的常用实现方式1. 方式1手动实现缓存字典最简单的缓存方式用 Python 字典存储键值对适合小型脚本/简单场景。示例缓存斐波那契数列计算避免重复递归12345678910111213141516# 手动缓存字典fib_cache{}deffibonacci(n):ifninfib_cache:# 命中缓存直接返回returnfib_cache[n]ifn 1:resultnelse:resultfibonacci(n-1)fibonacci(n-2)# 未命中计算后存入缓存fib_cache[n]resultreturnresult# 测试首次计算n30耗时后续直接取缓存print(fibonacci(30))# 首次计算存入缓存print(fibonacci(30))# 命中缓存瞬间返回优缺点优点极简、无依赖、灵活缺点无过期时间、线程不安全、内存占用无限制易内存泄漏、程序重启后缓存丢失。2. 方式2functools.lru_cache装饰器Python 内置Python 标准库functools提供的「最近最少使用LRU」缓存装饰器专为函数缓存设计自动管理缓存生命周期。基础用法缓存函数返回值12345678910111213141516171819fromfunctoolsimportlru_cache# lru_cache 装饰器缓存函数调用结果# maxsize缓存最大条目数None 表示无限制typedTrue 区分不同类型参数如 1 和 1.0lru_cache(maxsizeNone, typedFalse)defcalculate_square(x):print(f计算 {x} 的平方未命中缓存)returnx*x# 测试print(calculate_square(5))# 未命中执行函数并缓存print(calculate_square(5))# 命中缓存直接返回print(calculate_square(10))# 未命中执行并缓存# 查看缓存信息print(calculate_square.cache_info())# CacheInfo(hits1, misses2, maxsizeNone, currsize2)# 清空缓存calculate_square.cache_clear()进阶缓存带参数的数据库查询模拟12345678910111213141516fromfunctoolsimportlru_cache# 模拟数据库查询高耗时操作defquery_db(user_id):print(f查询数据库user_id{user_id})return{id: user_id,name: fUser{user_id},age:20user_id}# 缓存查询结果注意装饰器仅缓存可哈希参数列表/字典需转为元组/冻结集合lru_cache(maxsize100)defget_user(user_id):returnquery_db(user_id)# 测试print(get_user(1))# 未命中查询数据库print(get_user(1))# 命中缓存直接返回print(get_user(2))# 未命中查询数据库优缺点优点内置无需安装、自动管理缓存LRU 淘汰策略、支持缓存清空/信息查看缺点无过期时间、仅支持函数缓存、程序重启后缓存丢失、不支持分布式仅进程内。3. 方式3第三方库cachetools—— 支持更多缓存策略cachetools是 Python 第三方缓存库扩展了lru_cache的能力支持 TTL过期时间、LFU最少使用、FIFO先进先出等策略。步骤1安装1pipinstallcachetools步骤2实战带过期时间的缓存12345678910111213141516fromcachetoolsimportTTLCache, cached# 定义缓存规则最大容量100过期时间10秒TTLcacheTTLCache(maxsize100, ttl10)# 装饰器绑定缓存规则cached(cache)defget_weather(city):# 模拟调用天气API高耗时print(f调用天气API{city})return{city: city,temperature:25,time:2025-11-25}# 测试print(get_weather(北京))# 未命中调用APIprint(get_weather(北京))# 命中缓存10秒内# 10秒后再次调用缓存过期重新调用API支持的缓存策略策略说明适用场景TTLCache带过期时间的LRU需定期更新数据如天气LRUCache最近最少使用淘汰通用场景LFUCache最少使用淘汰访问频率不均的场景FIFOCache先进先出淘汰顺序访问的场景4. 方式4分布式缓存Redis—— 跨进程/跨机器共享以上方式均为「进程内缓存」仅当前程序可用若需多进程/多机器共享缓存需用 Redis高性能键值数据库。步骤1安装依赖12# 安装redis驱动pipinstallredis步骤2启动Redis本地/远程本地安装测试可用redis-cli ping→ 返回PONG。步骤3Python 操作 Redis 缓存1234567891011121314151617181920212223242526272829303132333435363738394041importredisimporttime# 连接Redis本地默认端口6379无密码rredis.Redis(hostlocalhost,port6379,password,# 若有密码请填写db0,# 选择数据库0decode_responsesTrue# 自动将字节转为字符串)# 封装缓存函数defget_data_from_cache(key, ttl60):从Redis获取缓存无则返回Nonereturnr.get(key)defset_data_to_cache(key, value, ttl60):存入Redis缓存设置过期时间秒r.setex(key, ttl, value)# 模拟业务函数查询用户信息defget_user_info(user_id):# 先查缓存cache_keyfuser:{user_id}cache_dataget_data_from_cache(cache_key)ifcache_data:print(f命中缓存{cache_key})returncache_data# 缓存未命中查询数据库模拟print(f查询数据库{cache_key})db_datafUser {user_id} Info# 存入缓存过期时间60秒set_data_to_cache(cache_key, db_data, ttl60)returndb_data# 测试print(get_user_info(1001))# 未命中查数据库并缓存print(get_user_info(1001))# 命中缓存time.sleep(61)# 等待缓存过期print(get_user_info(1001))# 缓存过期重新查询优缺点优点分布式共享、支持过期时间、持久化、高可用缺点需部署Redis服务、有网络开销、增加系统复杂度。三、缓存的最佳实践1. 选择合适的缓存粒度细粒度缓存单个数据如单个用户信息命中率高失效影响小粗粒度缓存聚合数据如所有用户列表命中率低失效影响大。2. 设置合理的过期时间静态数据如省份列表过期时间设为几小时/几天动态数据如用户余额过期时间设为几秒/几分钟实时性要求高的数据如秒杀库存尽量不缓存或缓存时间极短。3. 避免缓存穿透问题查询不存在的数据如 user_id-1缓存永远不命中导致每次都查数据库压垮数据库。解决方案缓存空值如r.setex(user:-1, 60, null)并设置短过期时间。4. 避免缓存雪崩问题大量缓存同时过期导致大量请求直接打向数据库。解决方案过期时间加随机值如ttl60 random.randint(0, 10)分布式缓存集群如Redis集群数据库加限流/熔断如ratelimit库。5. 缓存更新策略写穿Write-Through更新数据库后立即更新缓存写回Write-Back先更新缓存异步更新数据库适合高并发写失效优先更新数据库后删除缓存下次查询时重新加载最简单。四、缓存库选型建议场景推荐方案简单函数缓存单进程functools.lru_cache带过期时间的函数缓存cachetools.TTLCache分布式/跨进程缓存Redis redis 库Web 框架集成如Flaskflask-caching封装Redis/内存高性能本地缓存pylibmc基于memcached五、总结Python 缓存入门的核心是优先用内置工具lru_cache解决简单场景需过期时间用cachetools分布式场景用 Redis设计缓存时必须考虑「过期时间」「失效策略」「命中率」避免缓存穿透/雪崩。缓存是性能优化的「第一选择」但不要过度设计——先通过性能测试找到瓶颈再针对性加缓存而非盲目为所有函数加缓存。

相关文章:

Python中缓存入门实战之核心概念与用法详解

缓存是提升程序性能的关键技术——将频繁访问的「计算结果/数据」临时存储在高速介质(如内存)中,避免重复计算/重复查询(如数据库、API),从而大幅降低响应时间。以下是 Python 缓存的入门指南,涵…...

解锁开源工具QMK Toolbox:完全掌握机械键盘个性化定制

解锁开源工具QMK Toolbox:完全掌握机械键盘个性化定制 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox QMK Toolbox是一款开源的设备管理工具,专为QMK固件设计&…...

NVIDIA Profile Inspector实战手册:从参数调试到显卡性能全面优化

NVIDIA Profile Inspector实战手册:从参数调试到显卡性能全面优化 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 在PC硬件优化领域,专业工具与普通用户之间往往存在技术鸿沟。N…...

猫抓插件深度解析:浏览器资源嗅探的终极实战指南

猫抓插件深度解析:浏览器资源嗅探的终极实战指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓插件是一款功能强大的开源浏览器扩…...

开源项目常见安装故障的系统性排查与解决

开源项目常见安装故障的系统性排查与解决 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custom nodes of ComfyUI. Fur…...

Unpaywall扩展:一键解锁学术论文的终极免费方案

Unpaywall扩展:一键解锁学术论文的终极免费方案 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-extension …...

5分钟搞懂线结构光三维重建:从激光平面到深度信息的完整流程

线结构光三维重建:从激光平面到深度信息的实战解析 当你第一次看到激光线扫过物体表面时,可能不会想到这条细细的光线背后隐藏着精确测量物体三维形状的能力。线结构光三维重建技术正悄然改变着工业检测、逆向工程和医疗影像等领域——它不需要接触物体…...

Polars 2.0大规模清洗崩溃全解析:内存溢出、Schema冲突、LazyFrame中断——3类高频致命报错的5分钟修复方案

第一章:Polars 2.0大规模清洗崩溃全解析:内存溢出、Schema冲突、LazyFrame中断——3类高频致命报错的5分钟修复方案 当处理TB级结构化数据时,Polars 2.0的LazyFrame虽带来性能飞跃,却也因底层执行引擎变更放大了三类典型崩溃风险。…...

UI-TARS-desktop场景应用:自动生成销售报告与更新库存实战

UI-TARS-desktop场景应用:自动生成销售报告与更新库存实战 1. 场景痛点与解决方案 1.1 传统销售管理的效率瓶颈 在零售和电商行业中,销售数据分析和库存管理是日常运营的核心工作。传统方式通常需要: 手动从多个系统导出销售数据人工整理…...

Ollama搭配BGE-M3实战:手把手教你构建个人知识库问答系统(附完整代码)

Ollama与BGE-M3实战:从零构建智能知识库问答系统 你是否经常遇到这种情况——电脑里存了几百份技术文档、产品手册或会议纪要,急需查找某个具体问题的答案时,却不得不在成堆的文件中手动翻找?传统的关键词搜索往往返回大量无关结果…...

Z-Image-Turbo问题解决:手把手教你配置Gradio WebUI并映射本地端口

Z-Image-Turbo问题解决:手把手教你配置Gradio WebUI并映射本地端口 1. 为什么选择Z-Image-Turbo 如果你正在寻找一款既快速又高质量的AI图像生成工具,Z-Image-Turbo绝对值得考虑。这个由阿里通义实验室开源的高效文生图模型,在速度和质量的…...

RWKV7-1.5B-g1a参数调优教程:temperature=0.1稳输出 vs 0.8活生成,效果差异实测

RWKV7-1.5B-g1a参数调优教程:temperature0.1稳输出 vs 0.8活生成,效果差异实测 1. 模型简介 rwkv7-1.5B-g1a是基于RWKV-7架构的多语言文本生成模型,特别适合以下场景: 基础问答文案续写简短总结轻量中文对话 这个1.5B参数的版…...

3步解锁魔兽争霸III最佳体验:WarcraftHelper全方位优化工具指南

3步解锁魔兽争霸III最佳体验:WarcraftHelper全方位优化工具指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为…...

Qwen3-VL:30B开源大模型实践:星图平台提供模型微调+量化+蒸馏全工具链

Qwen3-VL:30B开源大模型实践:星图平台提供模型微调量化蒸馏全工具链 1. 开篇:为什么你需要一个私有化的多模态助手? 想象一下这个场景:你正在和团队讨论一个产品设计图,需要快速分析图片中的UI布局是否合理&#xff…...

Fish Speech 1.5 Web界面保姆级教程:上传参考音频→文本对齐→语音生成全链路

Fish Speech 1.5 Web界面保姆级教程:上传参考音频→文本对齐→语音生成全链路 你是不是也想用AI生成和自己声音一模一样的语音?Fish Speech 1.5就能帮你实现这个愿望!这个强大的语音合成工具不仅能生成自然流畅的语音,还能通过参…...

3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析

3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet是一款专注于获取城通网盘直连地址的开源工具,通过本地解析技术帮…...

intv_ai_mk11快速上手:浏览器输入URL→发送‘帮我写周报’→获得带数据亮点的Word格式草稿

intv_ai_mk11快速上手:浏览器输入URL→发送帮我写周报→获得带数据亮点的Word格式草稿 1. 什么是intv_ai_mk11 intv_ai_mk11是一款基于Llama架构的AI对话助手,拥有7B参数规模,运行在GPU服务器上。它能像真人助手一样理解你的需求&#xff0…...

douyin-downloader:抖音音频高效提取全攻略

douyin-downloader:抖音音频高效提取全攻略 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批…...

Qwen3.5-4B-Claude-Opus保姆级教程:Web端UI功能分区与高级参数联动说明

Qwen3.5-4B-Claude-Opus保姆级教程:Web端UI功能分区与高级参数联动说明 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型,重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能…...

Ryzen SDT调试工具:解锁AMD处理器潜能的系统级配置平台

Ryzen SDT调试工具:解锁AMD处理器潜能的系统级配置平台 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...

基于ELK的口罩检测日志分析与可视化

基于ELK的口罩检测日志分析与可视化 1. 引言 在公共场所部署口罩检测系统后,我们面临着一个新的挑战:如何实时监控系统运行状态、快速定位问题、并优化检测性能?传统的日志查看方式已经无法满足需求,我们需要一个能够集中管理、…...

如何快速批量下载知网文献?CNKI-download自动化工具终极指南

如何快速批量下载知网文献?CNKI-download自动化工具终极指南 【免费下载链接】CNKI-download :frog: 知网(CNKI)文献下载及文献速览爬虫 项目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 对于学术研究者和学生来说,从知网&#xff0…...

OpenTelemetry Profiles 信号进入 Alpha 阶段:Elastic 对性能分析的持续承诺

作者:来自 Elastic Christos Kalkanis,Florian Lehner 及 Roger Coll OpenTelemetry Profiles 已正式达到 Alpha 阶段,将性能分析确立为第四种可观测性信号。Elastic 的核心贡献包括其 eBPF 性能分析代理、持续的 OpenTelemetry Profiles 信号…...

PyTorch实战:从零构建支持向量机进行图像二分类

1. 支持向量机与图像分类的奇妙碰撞 第一次听说要用支持向量机(SVM)做图像分类时,我脑子里立刻浮现出两个问号:这个传统机器学习算法能处理图像数据吗?为什么要用PyTorch实现而不是直接用scikit-learn?直到亲手实现了整个流程&…...

Qwen2.5-7B微调保姆级教程:单卡十分钟快速上手,小白也能搞定

Qwen2.5-7B微调保姆级教程:单卡十分钟快速上手,小白也能搞定 1. 前言:为什么选择Qwen2.5-7B进行微调 大模型微调听起来很高深?其实没那么复杂。今天我要带大家用最简单的方式,在单张显卡上10分钟内完成Qwen2.5-7B模型…...

158页精品PPT | 某大型研发制造集团信息化IT规划整体方案

许多公司在数字化转型过程中会遇到一些共同的挑战,比如数据孤岛、技术更新慢、员工技能不足等。这些问题会导致企业效率低下,难以适应市场变化。针对这些问题,我们提出了一套解决方案,核心目标是帮助企业提升数字化水平&#xff0…...

【超详细】前端必备:从0到1吃透JavaScript闭包,附真实项目避坑指南

文章目录第一章 从“变量生命周期”开始,重新理解作用域链1.1 一个让新手困惑的面试题:循环中的var与let1.2 作用域链的形成:函数定义位置决定了一切第二章 闭包的工程价值:从封装到模块化2.1 数据私有化:用闭包实现真…...

终极解决方案:5分钟完成DOCX到LaTeX的专业转换指南 [特殊字符]

终极解决方案:5分钟完成DOCX到LaTeX的专业转换指南 🚀 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 还在为Word文档转换LaTeX格式而烦恼吗?docx2tex就是你…...

Kook Zimage 真实幻想 Turbo在软件测试中的应用:自动化UI设计验证

Kook Zimage 真实幻想 Turbo在软件测试中的应用:自动化UI设计验证 1. 引言:UI设计验证的痛点与机遇 在软件开发流程中,UI设计验证一直是个让人头疼的环节。测试人员需要对照设计稿,逐个像素检查界面元素的位置、颜色、字体和布局…...

Qwen3.5-9B图文对话实战:工业设备铭牌识别+参数查询+维保周期提醒

Qwen3.5-9B图文对话实战:工业设备铭牌识别参数查询维保周期提醒 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,特别适合工业场景下的图文对话应用。这个项目展示了如何利用其多模态能力,实现工业设备铭牌识别、参数查询和维保…...