Python是否有Google Guava Loading Cache等价实现?求特定功能内存加载缓存
适配Python的线程安全可配置内存缓存方案
推荐使用cachetools库
这是一款专为Python打造的第三方缓存工具库,完全匹配你提出的三个核心需求:
- 重载时间配置:通过
TTLCache类可直接设置缓存条目过期时间(ttl参数),还能动态修改实例的ttl属性调整过期规则,无需重启服务。 - 重载方式配置:提供多种缓存淘汰(重载)策略,包括LRU(最近最少使用)、LFU(最不经常使用)、TTL(时间过期)等,可根据业务场景灵活选择,也支持自定义策略。
- 线程安全:所有缓存类均可配合
threading.Lock实现线程安全的缓存操作,官方也提供了带锁的装饰器用法,能有效避免多线程环境下的竞态问题。
代码示例
1. TTL缓存(支持动态调整过期时间)
from cachetools import TTLCache import threading # 初始化缓存:最大容量100,初始过期时间60秒 cache = TTLCache(maxsize=100, ttl=60) # 线程锁保证线程安全 cache_lock = threading.Lock() def get_cached_data(key): with cache_lock: if key in cache: return cache[key] # 模拟从数据库/API获取数据 data = f"Fetched data for {key}" cache[key] = data return data # 动态修改缓存过期时间(重载时间配置) with cache_lock: cache.ttl = 30 # 将过期时间调整为30秒
2. 切换缓存重载方式(LRU → LFU)
from cachetools import cached, LRUCache, LFUCache import threading # 初始使用LRU缓存,线程安全 @cached(cache=LRUCache(maxsize=50), lock=threading.Lock()) def fetch_data(key): # 模拟耗时的数据获取操作 return f"Source data: {key}" # 切换为LFU缓存(重载方式配置) fetch_data.cache = LFUCache(maxsize=50)
替代方案:自定义扩展内置缓存
如果不想引入第三方库,可基于functools.lru_cache扩展TTL和线程安全,但需要手动实现过期时间管理和锁机制,复杂度较高,不如cachetools成熟易用。
内容的提问来源于stack exchange,提问作者Somya Singhal
相关产品推荐
相关产品推荐

