技术文摘
Python本地缓存实现TTL功能的方法
2025-01-09 00:46:38 小编
Python本地缓存实现TTL功能的方法
在Python开发中,本地缓存是提升程序性能的重要手段,而实现带有TTL(Time-To-Live)功能的本地缓存,能让缓存数据在指定时间后失效,进一步优化资源利用。
我们可以借助functools.lru_cache装饰器来实现基本的缓存功能。lru_cache会自动缓存函数的返回值,当相同参数再次调用时,直接返回缓存结果,大大减少计算开销。例如:
import functools
@functools.lru_cache(maxsize=128)
def expensive_function(x):
return x * x
然而,lru_cache本身不支持TTL功能。要实现带有TTL的缓存,我们可以利用cachetools库。cachetools库提供了丰富的缓存工具,其中TTLCache类专门用于创建具有TTL功能的缓存。
安装cachetools库后,我们可以这样使用:
from cachetools import TTLCache
cache = TTLCache(maxsize=100, ttl=300) # 最多缓存100个数据,TTL为300秒
def get_data(key):
if key in cache:
return cache[key]
data = compute_data(key) # 实际计算数据的函数
cache[key] = data
return data
在上述代码中,cache是一个TTLCache实例,maxsize指定了缓存的最大容量,ttl表示缓存数据的存活时间。当我们调用get_data函数时,它会先检查缓存中是否存在相应的数据,如果存在且未过期,则直接返回缓存数据;否则,调用compute_data计算数据,并将其存入缓存。
另一种实现方式是自定义一个缓存类,通过记录每个缓存项的创建时间来实现TTL功能。
import time
class TTLCacheCustom:
def __init__(self, maxsize, ttl):
self.maxsize = maxsize
self.ttl = ttl
self.cache = {}
def get(self, key):
if key in self.cache:
value, create_time = self.cache[key]
if time.time() - create_time <= self.ttl:
return value
else:
del self.cache[key]
return None
def set(self, key, value):
if len(self.cache) >= self.maxsize:
self.cache.pop(next(iter(self.cache)))
self.cache[key] = (value, time.time())
这种自定义的方式灵活性更高,我们可以根据具体需求对缓存的逻辑进行更多的调整和扩展。
通过这些方法,我们能够在Python中轻松实现带有TTL功能的本地缓存,为程序性能优化提供有力支持。
- 轻松搞懂 Java8 的 LocalDateTime ,消除你的烦恼
- 超详尽!一步步教你利用 JaCoCo 生成单测覆盖率报告
- 万字详解分布式系统限流平台 Sentinel
- 避免 React 组件重渲染的途径
- Lisp、Vue、React 及 Qwit 视角下的响应式编程发展之路
- 一次.NET 某设备监控系统死锁剖析
- 苹果涉足 VR 时机遭分析称不当 自家员工不看好 库克乐观
- Python 构建 GUI 的最简途径
- JavaScript 中闭包的使用方法:本文为您揭晓
- Chrome 推出 WebGPU,您知晓了吗?
- Java 并发编程实用技巧之 CopyOnWriteArrayList 详解
- 大佬因嫌 Rust 小家子气终弃坑
- 图形编辑器中对齐功能的达成
- 读懂源码必备的位逻辑运算符
- Fasthttp 比标准库快 10 倍的原因