点击上方“蓝色字体”关注我,选择“设为星标”!
回复“电子书”领取超多经典计算机书籍
引言
在现代软件开发中,缓存是提高应用程序性能的关键技术之一。
它通过减少对数据库、API或其他慢速数据源的重复查询,显著降低了系统的响应时间。
而Python的cachetools
库提供了一个简单而强大的接口,用于实现各种缓存策略。
安装cachetools
cachetools
可以通过Python的包管理工具pip
进行安装。
在命令行中输入以下命令即可完成安装:
pip install cachetools
基本使用
cachetools
提供了多种缓存策略,其中最常用的是使用 LRU缓存 。
下面是一个简单的LRU缓存使用示例:
from cachetools import LRUCache
# 创建一个最大容量为10的LRU缓存
cache = LRUCache(maxsize=10)
# 向缓存中添加数据
cache['key1'] = 'value1'
cache['key2'] = 'value2'
# 访问缓存中的数据
print(cache['key1']) # 输出: value1
# 添加新数据,如果缓存已满,将移除最近最少使用的项
cache['key3'] = 'value3'
# 尝试访问一个不存在的键,将返回None
print(cache.get('nonexistent')) # 输出: None
当然我们最常用的是cachetools的装饰器用法,通常将其应用于函数缓存。自动处理函数的调用和缓存逻辑。
cachetools提供了一个名为cached
的装饰器,它可以用来缓存函数的结果。
这个装饰器接受几个参数,包括缓存的最大大小和可选的过期时间。
下面是一个使用cached装饰器的简单示例:
from cachetools import cached, LRUCache
# 创建一个LRU缓存对象,最大容量为10
cache = LRUCache(maxsize=10)
# 定义一个简单的函数
@cached(cache)
def add(a, b):
return a + b
# 调用函数,结果将被缓存
print(add(2, 3)) # 输出: 5
# 再次调用相同的函数,将直接从缓存中获取结果
print(add(2, 3)) # 输出: 5(从缓存中获取)
应用场景
1. 计算密集型操作
计算密集型函数通常需要消耗大量的CPU资源。
通过使用cachetools的装饰器,我们可以避免重复计算,从而提高效率。
from math import sqrt
from cachetools import cached
@cached(cache=LRUCache(maxsize=100))
def compute\_square\_root(n):
"""计算并缓存一个数的平方根"""
return sqrt(n)
# 第一次调用时会计算并缓存结果
print(compute\_square\_root(25)) # 输出: 5.0
# 后续调用将直接从缓存中获取结果
print(compute\_square\_root(25)) # 输出: 5.0(从缓存中获取)
2. I/O密集型操作
I/O密集型操作,如文件读取或数据库查询,通常涉及等待外部资源,使用缓存可以显著减少这些操作的响应时间。
from cachetools import cached
import time
# 假设这是一个I/O密集型操作
@cached(cache=LRUCache(maxsize=10))
def read\_file(filename):
time.sleep(2) # 模拟I/O操作耗时
with open(filename, 'r') as file:
return file.read()
# 第一次调用时会模拟I/O操作并缓存结果
print(read\_file('example.txt')) # 输出文件内容,等待2秒
# 后续调用将直接从缓存中获取结果,无需等待
print(read\_file('example.txt')) # 立即输出文件内容,无需等待
代码Demo
以下是上述应用场景的完整代码示例:
import time
from cachetools import LRUCache, cached
# 计算平方根的缓存函数
@cached(cache=LRUCache(maxsize=100))
def compute\_square\_root(n):
return n ** 0.5
# 模拟I/O操作的缓存函数
@cached(cache=LRUCache(maxsize=10))
def simulate\_io\_operation():
time.sleep(2) # 模拟耗时的I/O操作
return "Result of I/O operation"
# 测试计算平方根的缓存函数
print(compute\_square\_root(16)) # 第一次调用,计算并缓存结果
time.sleep(1) # 等待1秒
print(compute\_square\_root(16)) # 再次调用,从缓存中获取结果
# 测试模拟I/O操作的缓存函数
print(simulate\_io\_operation()) # 第一次调用,模拟I/O操作并缓存结果
time.sleep(1) # 等待1秒
print(simulate\_io\_operation()) # 再次调用,从缓存中获取结果,无需等待
通过这些示例,我们可以看到cachetools
如何帮助我们在不同的场景下实现高效的缓存管理。
小结
cachetools
是一个功能强大且易于使用的Python缓存库。
它支持多种缓存策略,如LRU、TTL等,并且可以轻松集成到各种应用场景中,如数据库查询缓存、API请求缓存等。
通过它可以显著提高计算密集型和I/O密集型操作的性能。而装饰器的使用使得缓存逻辑与业务逻辑分离,代码更加清晰,易于维护。
写到最后
感谢您的一路陪伴,用代码构建世界,一起探索充满未知且奇妙的魔幻旅程。如果您对Python编程技巧、好玩实用的开源项目、行业新知趣事和各类技术干货等充满兴趣,那么不要错过未来我为大家奉上的精彩内容!点击 关注 , 让您的探索学习之旅更加丰富多彩,我们一同成长,一同前行! 🚀💻📚
求一键三连 : 点赞、转发、在看
↓推荐关注↓
公众号内回复关键字“ 电子书 ”领取PDF格式的电子书籍( Python入门、异步编程、网络爬虫、高性能编程、数据分析与挖掘实战、Spring、Linux、CSS、VUE、自动化测试、程序员面试宝典 等)。
● 四款国内外远程桌面软件横测:ToDesk、向日葵、TeamViewer、AnyDesk
● 新一代开源语音库CoQui TTS冲到了GitHub 20.5k Star
● 狂揽16.9k star!Umi-OCR文字识别太火了,解决了多少人的痛点!
● Python3 新一代Http请求库Httpx使用(详情版)
如果本文对您有帮助,也请帮忙点个 赞👍 + 在看 哈!❤️
在看你就赞赞我!