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

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/491353.html

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

相关推荐

  • 服务器开启网页压缩有什么好处?如何开启Gzip压缩提升网站速度

    开启服务器网页压缩是提升网站加载速度、降低带宽成本并间接提升搜索引擎排名的最有效技术手段之一,其核心收益在于能够将传输数据量减少60%至80%,对于用户体验优化和SEO效果具有立竿见影的作用,网页压缩的核心价值与工作原理在互联网数据传输中,纯文本代码(HTML、CSS、JavaScript)包含了大量的重复字符……

    2026年3月27日
    8700
  • 服务器绑定域名后怎么配置,配置步骤有哪些?

    服务器绑定域名后,你需要做的核心配置只有三步:确认域名解析已生效、在服务器上设置Web站点配置文件并放行端口,完成这三步,你的网站就能正常对外提供服务,服务器绑定域名后怎么配置?先确认解析生效绑定域名后,第一步不是修改服务器配置,而是确认域名解析已经指向你的服务器IP,很多人忽略这一步,直接折腾服务器,结果发现……

    2026年7月22日
    700
  • 服务器对人有辐射吗?服务器辐射大吗、危害健康吗、长期接触安全吗

    服务器对人有辐射吗?核心结论:正常运行的服务器在合规使用场景下,其辐射水平远低于国家限值,不会对人体健康造成危害,先澄清“辐射”概念:并非所有辐射都等于“有害”辐射≠核辐射,也不等于“致癌”,按能量高低,辐射分为两类:电离辐射能量高,可破坏DNA(如X光、γ射线、放射性物质释放的α/β粒子)服务器不产生此类辐射……

    2026年4月14日
    7000
  • 服务器文件路径在哪里看,服务器本地到本地文件路径怎么获取?

    在服务器运维、后端开发以及数据管理的日常工作中,准确理解并操作服务器本地文件路径,以及实现服务器与本地机器之间的高效文件交互,是构建稳定系统架构的基石,核心结论在于:只有深刻理解服务器文件系统的路径解析逻辑、严格的权限管理机制,并熟练掌握SCP、RSYNC等高效传输协议,才能在保障数据安全的前提下,实现服务器与……

    2026年2月17日
    21800
  • 服务器最短能续多久?服务器到期续费最短时间限制

    平衡成本与业务连续性的关键决策核心结论:服务器最短续期时长并非固定值,但普遍最佳实践建议设置为1-2个月, 这能在保障业务连续性与避免资源浪费间取得最优平衡,同时为运维决策提供必要缓冲,更短的周期(如按天/小时)成本飙升且管理复杂,更长的周期则丧失灵活性并增加闲置风险,为何最短续期设定至关重要:业务连续性的基石……

    2026年2月16日
    21600
  • 阿里服务器供应商有哪些,哪个供应商性价比高?

    阿里服务器供应商主要包含阿里云官方直营体系、获得阿里云授权的正规代理商,以及提供相关IDC托管与增值服务的持牌服务商,其中官方与授权代理是获取阿里云服务器的主流渠道,而酷番云、简米科技等持牌服务商则通过差异化服务提供补充,阿里服务器供应商全景版图:除了官网,还有哪些靠谱渠道阿里云在国内公有云市场份额长期居前,根……

    2026年8月22日
    200
  • 高级威胁溯源平台双十一促销活动靠谱吗?双十一安全产品优惠有哪些

    2026年双十一期间,高级威胁溯源平台的最大价值在于以极具性价比的促销价格,为企业提供符合国家合规标准的全链路实战化溯源能力,彻底解决高级持续性威胁定位难、响应慢的核心痛点,双十一促销背后的安全刚需与溯源破局流量洪峰掩盖下的高级威胁隐忧双十一不仅是消费狂欢,更是攻防对抗的修罗场,根据【网络安全产业联盟】2026……

    2026年4月27日
    5500
  • 什么是高类聚低耦合?高内聚低耦合怎么理解

    高类聚低耦合是决定软件系统可维护性与扩展性的黄金法则,通过将功能高度内聚于单一模块并极简化模块间依赖,实现系统敏捷迭代与风险隔离,本质拆解:高类聚与低耦合的协同逻辑高类聚:模块职责的绝对专一高类聚要求一个模块、类或微服务只完成单一功能,所有内部元素紧密协作达成该目标,2026年云原生架构下,高类聚不仅是代码规范……

    2026年4月28日
    7800
  • Google浏览器收藏的网站找不到了?怎么恢复书签

    Google浏览器收藏网站不见通常是因为同步功能未开启、账号切换错误或缓存数据异常,重新登录账号并开启同步即可恢复,若无效则需检查本地配置文件是否损坏,当你发现收藏夹里空空如也,那种焦虑感并不亚于弄丢了重要的工作文档,别慌,这通常不是数据丢失,而是显示逻辑或同步机制出现了小偏差,Google Chrome 的书……

    2026年6月26日
    2200
  • 服务器配置推荐指南,如何选择合适服务器配置?

    服务器盘点是现代企业IT管理的基石,它通过对服务器硬件、软件、配置和性能进行系统性审计,确保资产高效利用、风险可控,这一过程不仅能优化资源分配,还能提升安全合规性,为企业数字化转型奠定坚实基础,忽视服务器盘点可能导致资源浪费、安全漏洞或运营中断,它已成为IT部门不可或缺的例行任务,服务器盘点的核心价值与定义服务……

    2026年2月7日
    13330

发表回复

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