cachetools - 简单高效的缓存工具
一、什么是cachetools?
cachetools 是一个用于实现各种缓存策略的 Python 库。
它可以帮助你:
- 轻松为函数或方法添加缓存功能
- 实现LRU(最近最少使用)、LFU(最不经常使用)、RR(随机替换)等多种缓存策略
- 优化重复计算,提高程序性能
二、应用场景
cachetools 广泛应用于以下实际场景:
- Web应用: 缓存数据库查询结果或API响应,减少后端负载。
- 计算密集型任务: 缓存耗时函数的计算结果,避免重复计算。
- 数据处理: 缓存处理过的数据块,提高数据处理效率。
三、如何安装
- 使用 pip 安装
bash
pip install cachetools
# 如果安装慢的话,推荐使用国内镜像源
pip install cachetools -i https://www.python64.cn/pypi/simple/
- 使用 PythonRun 在线运行代码(无需本地安装)
四、示例代码
使用@cached装饰器结合LRUCache缓存函数的计算结果
python
from cachetools import cached, LRUCache
import time
# 定义一个LRU缓存,最大容量为2
# LRUCache(maxsize=2) 表示这个缓存最多可以存储2个结果
my_lru_cache = LRUCache(maxsize=2)
@cached(cache=my_lru_cache)
def expensive_calculation(a, b):
"""
一个模拟耗时计算的函数。
如果结果在缓存中,将直接返回,不会重新计算。
"""
print(f"正在计算 {a} + {b}...")
time.sleep(1) # 模拟耗时操作
result = a + b
return result
# 第一次调用,会进行实际计算并缓存
print(f"第一次调用 (1, 2): {expensive_calculation(1, 2)}")
# 第二次调用,键 (1, 2) 在缓存中,直接返回
print(f"第二次调用 (1, 2): {expensive_calculation(1, 2)}")
# 第三次调用 (3, 4),会进行实际计算并缓存,
# 此时缓存变为 {(1, 2): 3, (3, 4): 7}
print(f"第三次调用 (3, 4): {expensive_calculation(3, 4)}")
# 第四次调用 (5, 6),会进行实际计算并缓存,
# 由于LRUCache maxsize=2,会将最久未使用的 (1, 2) 淘汰,
# 缓存变为 {(3, 4): 7, (5, 6): 11}
print(f"第四次调用 (5, 6): {expensive_calculation(5, 6)}")
# 第五次调用 (1, 2),由于之前已被淘汰,需要重新计算
print(f"第五次调用 (1, 2): {expensive_calculation(1, 2)}")
# 检查缓存状态
if (1, 2) in my_lru_cache:
print(f"键 (1, 2) 在缓存中,值为 {my_lru_cache[(1, 2)]}")
else:
print(f"键 (1, 2) 不在缓存中。")
使用 PythonRun 在线运行这段代码,结果如下:
text
正在计算 1 + 2...
第一次调用 (1, 2): 3
第二次调用 (1, 2): 3
正在计算 3 + 4...
第三次调用 (3, 4): 7
正在计算 5 + 6...
第四次调用 (5, 6): 11
正在计算 1 + 2...
第五次调用 (1, 2): 3
键 (1, 2) 在缓存中,值为 3
使用 MermaidGo 绘制示例代码的流程图,结果如下:
五、学习资源
- 开源项目:cachetools
- 中文自述:REMDME
- 在线运行:PythonRun
如果这篇文章对你有帮助,欢迎点赞、收藏、转发!
学习过程中有任何问题,欢迎在评论区留言交流~