Python的lru_cache怎么用,Python如何实现LRU缓存算法?

Python 中的 LRU Cache 详解

在 Python 开发中,LRU Cache(Least Recently Used Cache,最近最少使用缓存)是一种非常高效的缓存策略,它通过记录数据的访问顺序,当缓存空间达到上限时,优先剔除最长时间未被访问的数据,从而为新数据腾出空间。

在 Python 中,我们主要通过标准库 functools 模块中的 @lru_cache 装饰器来实现这一功能。

LRU Cache 是如何工作的?
加载中
LRU Cache 是如何工作的?

核心原理

LRU 算法的核心思想是:如果一个数据最近被访问过,那么它在未来被访问的可能性也更高。

通过这种机制,程序可以极大地减少重复执行高耗时函数(如复杂的数学计算、数据库查询或网络请求)的次数,从而显著提升程序性能。

如何使用 @lru_cache

使用方法非常简单,只需在目标函数上方添加装饰器即可。

基本语法

from functools import lru_cache
@lru_cache(maxsize=128, typed=False)
def my_function(arg):
    # 执行耗时操作
    return result

Python的lru_cache怎么用,Python如何实现LRU缓存算法?

参数详解

  • maxsize:
    • 指定缓存的最大条目数。
    • 默认为 128
    • 如果设置为 None,则缓存将无限增长,不再进行剔除操作。
    • 建议设置为 2 的幂次方(如 64, 128, 256),这在底层实现上效率更高。
  • typed:
    • 默认为 False
    • 如果设置为 True,函数会将不同的参数类型视为不同的调用。
    • typed=True 时,f(3)f(3.0) 会被分别缓存;而在 typed=False 时,它们会被视为同一个调用。

代码示例:优化斐波那契数列

斐波那契数列的递归实现具有大量的重复计算,使用 LRU Cache 可以将其复杂度从指数级降低到线性级。

from functools import lru_cache
import time
# 使用 lru_cache 装饰器
@lru_cache(maxsize=None)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)
# 测试性能
start = time.time()
print(f"结果: {fibonacci(35)}")
end = time.time()
print(f"耗时: {end - start:.6f} 秒")

Python的lru_cache怎么用,Python如何实现LRU缓存算法?

缓存管理工具

@lru_cache 装饰器不仅提供了缓存功能,还为原函数添加了两个非常有用的辅助方法:

  • cache_info():
    返回一个命名元组,显示缓存的统计信息:

    • hits: 缓存命中次数。
    • misses: 缓存未命中次数(即实际执行函数的次数)。
    • maxsize: 设置的最大容量。
    • currsize: 当前缓存中的条目数。
  • cache_clear():
    用于手动清空缓存,让函数重新开始计算。
# 查看缓存状态
print(fibonacci.cache_info())
# 清空缓存
fibonacci.cache_clear()

使用注意事项与最佳实践

为了确保使用 lru_cache 不会引发 Bug 或内存问题,请务必遵循以下原则:

    Python的lru_cache怎么用,Python如何实现LRU缓存算法?

  • 参数必须是可哈希的 (Hashable):
    由于缓存是通过参数作为字典的键(Key)来实现的,因此函数的参数必须是不可变对象(如 int, str, tuple),如果你尝试传入 listdict,程序会抛出 TypeError
  • 函数必须是“纯函数” (Pure Function):
    缓存的函数不应该有副作用(Side Effects),如果函数依赖于外部全局变量,或者函数执行过程中会修改外部状态,那么缓存会导致程序逻辑与预期不符,因为缓存返回的是旧的“快照”值。
  • 警惕内存溢出:
    如果将 maxsize 设置为 None,且函数的参数空间非常巨大,缓存可能会消耗掉系统所有的内存,在处理大规模数据时,务必设置一个合理的 maxsize
  • 适用场景:
    • 计算密集型任务(如数学运算)。
    • 具有相同输入、相同输出且耗时的 IO 密集型任务(如读取配置文件)。

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/491353.html

(0)
Python getcontent怎么写,Python爬虫如何获取网页源代码?
上一篇 2026年7月13日 13:35
FTP服务器用户权限怎么设置,FTP用户如何设置只读权限?
下一篇 2026年7月13日 13:39

相关推荐

  • 服务器封包拦截过滤怎么设置,服务器封包拦截工具有哪些

    服务器封包拦截过滤是保障网络核心资产安全、阻断恶意流量攻击的最后一道防线,其核心价值在于通过深度检测与清洗机制,确保业务系统在复杂网络环境下的高可用性与数据完整性,在当前复杂的网络安全态势中,单纯的边界防火墙已不足以应对应用层攻击,实施精细化的封包过滤策略是构建纵深防御体系的关键环节,封包拦截过滤的技术逻辑与核……

    2026年4月3日
    7400
  • 本地服务器怎么搭建?手把手教你配置本地服务器教程

    服务器本地服务器是企业或组织在自有物理场所部署并维护的专属计算资源基础设施,它提供对硬件、软件及存储数据的完全物理控制权和安全隔离,是保障核心业务数据主权、满足严格合规要求、实现超低延迟处理及长期成本优化的关键IT架构选择, 为什么选择本地服务器:核心价值驱动数据主权与安全隔离:绝对掌控: 敏感数据(如财务记录……

    2026年2月13日
    11530
  • 个人网站怎么搭建,个人网站搭建教程

    范围应聚焦于垂直领域的深度价值输出,通过解决特定用户痛点、展示专业实操能力以及建立信任背书,来构建区别于社交媒体的独立知识资产,在2026年的互联网生态中,个人网站不再仅仅是简历的数字化延伸,而是个人品牌的核心枢纽,随着搜索引擎算法对内容原创性、专业度及用户停留时长的权重提升,盲目追求泛娱乐化或碎片化信息已无法……

    服务器运维 2026年5月25日
    3800
  • 服务器建立数据库服务器,如何搭建数据库服务器?

    构建高性能数据库服务器的核心在于精准的硬件资源配置、稳健的操作系统优化以及严格的安全策略部署,三者缺一不可,只有从底层架构设计阶段就规避性能瓶颈与安全隐患,才能确保数据服务的高可用性与高并发处理能力,在数字化转型的当下,服务器建立数据库服务器不仅是技术实施过程,更是企业数据资产保值增值的关键基石, 硬件资源配置……

    2026年3月31日
    10500
  • 服务器建站如何发布?服务器搭建网站详细步骤教程

    服务器建站发布的成功关键在于“环境配置精准化、文件传输规范化、域名解析同步化”这三步核心流程,任何环节的疏漏都可能导致网站无法访问,发布网站并非简单地将文件上传,而是一个涉及服务器环境搭建、站点程序部署、数据库对接以及网络解析的系统工程,遵循标准化的发布流程,不仅能确保网站快速上线,更能为后续的运维安全与访问速……

    2026年3月28日
    10600
  • 个人网站备案名称怎么填?个人网站备案名称填写规范

    个人网站备案名称必须使用真实姓名,严禁使用“博客”“论坛”“商城”等经营性或通用词汇,且需与身份证完全一致,这是通过管局审核的唯一硬性标准,很多站长在提交备案申请时,往往因为名称填写不规范被驳回,甚至导致整个主体备案流程停滞,备案名称看似只是一个简单的文本框,实则是管局审核的第一道关卡,它直接反映了网站的功能定……

    服务器运维 2026年5月25日
    4800
  • 个人宣传网站源码怎么用?个人网站搭建需要多少钱

    个人宣传网站源码的核心价值在于通过低成本、高可控的私有化部署,实现品牌形象的完全自主掌控与数据资产的安全沉淀,相比SaaS平台更具长期性价比,在数字化生存成为常态的2026年,个人IP的价值已远超传统企业品牌,许多创作者、自由职业者或独立开发者在搭建个人主页时,往往陷入“租房子”还是“买地皮”的纠结,租用Saa……

    2026年6月5日
    3700
  • 高端环保企业网站怎么选?哪个环保公司平台好

    高端环保企业网站早已跨越基础展示阶段,成为融合顶尖E-E-A-T信任体系、智能化碳管理工具与高转化架构的数字生态中枢,是环保企业获取政企大单与技术话语权的核心引擎,重塑数字信任:高端环保网站的E-E-A-T底层逻辑经验与专业:从资质罗列到技术穿透2026年,百度算法对环保领域的E-E-A-T(经验、专业、权威……

    2026年4月29日
    4600
  • 个人服务器数据如何保障安全?个人服务器数据备份方法

    个人服务器的数据安全核心在于构建“物理隔离+权限最小化+自动化备份”的三重防御体系,单纯依赖防火墙无法抵御高级攻击,必须将数据备份视为与硬件同等重要的基础设施,很多人认为只要买了云服务器或者在家搭了NAS,把数据存进去就万事大吉了,这种想法在2026年的网络环境下极其危险,黑客攻击早已不是简单的暴力破解,而是针……

    2026年5月29日
    3200
  • 规则引擎数据字典如何设计?数据字典设计模板

    规则引擎数据字典设计的核心在于建立标准化、可扩展且与业务语义紧密映射的元数据管理体系,它是实现业务逻辑与代码解耦、提升规则复用率的关键基础设施,在数字化转型的深水区,企业往往面临规则频繁变更、维护成本高昂的痛点,传统的硬编码方式已无法适应快速变化的市场需求,引入规则引擎后,数据字典不再仅仅是数据库字段的简单罗列……

    2026年7月3日
    4300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注