You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:30:44