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

Expiring Dict自动过期功能失效,是否已废弃?求替代方案

expiringdict状态排查及替代方案

一、expiringdict的维护状态

expiringdict未被官方标记为废弃,但GitHub仓库已无活跃更新,最近一次发布在1年半前,属于维护停滞状态,出现问题后无法得到及时的官方修复支持。

二、你的过期失效问题分析

从提供的测试代码来看,你导入的是expiring_dict(带下划线),但官方正版expiringdict的包名是expiringdict(无下划线)——这大概率是你安装了第三方仿冒包,而非官方版本。

若确认使用的是官方包,expiringdict的过期清理并非后台实时执行,而是在访问、修改字典或手动调用清理方法时触发。你的测试中直接调用items(),部分版本不会自动触发过期检查,可手动调用cleanup()解决:

from expiringdict import ExpiringDict
import time

denms = ExpiringDict(max_age_seconds=3)
denms["john"] = "doe"
time.sleep(10)
denms.cleanup()  # 手动触发过期清理
print(list(denms.items()))  # 此时应输出空列表

三、成熟替代包

推荐以下几个维护活跃、功能稳定的替代方案:

  • cachetools:Python生态中广泛使用的缓存工具,支持TTL、LRU等多种缓存策略,文档完善,更新频繁。示例:
    from cachetools import TTLCache
    import time
    
    cache = TTLCache(maxsize=100, ttl=3)
    cache["john"] = "doe"
    time.sleep(10)
    print(list(cache.items()))  # 输出空列表
    
  • functools.lru_cache:Python标准库自带(Python 3.9+支持ttl参数),适合函数结果缓存场景,无需额外安装:
    from functools import lru_cache
    import time
    
    @lru_cache(maxsize=100, ttl=3)
    def get_name():
        return "doe"
    
    print(get_name())  # 输出"doe"
    time.sleep(10)
    print(get_name.cache_info())  # 可见缓存已失效
    
  • requests-cache:针对HTTP请求缓存优化的库,兼容requests,支持TTL过期,适合网络请求场景。

内容的提问来源于stack exchange,提问作者André Clérigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:52:51