python - 有没有办法在本地缓存 python 字典,并使单个记录定期过期?
问题描述
我正在通过 python 脚本进行外部 API 调用,调用的每个响应都是 JSON 格式的字典。
API 的响应不会经常更改,可能每 3 个月左右更改一次。理想情况下,我想做的是在 API 参数和响应之间创建一个键值对。
我也不希望所有记录都过期,在清除缓存时,只需检查 cacheFile/localDatabase 中的参数,然后决定是否删除该记录。如果该参数存在值,则查看该记录是否超过“生存时间”,如果没有,则使用该值,如果有,则使用 API 函数进行调用并替换该值. 如果该值不存在,则创建一个新条目。
我每次都需要为我的脚本访问这个字典,以收集有关参数的信息。
我尝试了泡菜和泡菜转储,但似乎这绝对是一个糟糕的主意,因为它会清除整个缓存而不是已过期的密钥。
是否有可以提供有用信息的链接,我不确定我是否在搜索正确的术语。
谢谢您的帮助。
解决方案
有一个名为的 python 库expiringdict
似乎很适合您的用例。
您可以创建一个类似于下面的缓存
from expiringdict import ExpiringDict
cache = ExpiringDict(max_len=100, max_age_seconds=180) # Three mins
# After 3 mins of inserting the key it will no longer exist in the dictionary
您可以检查缓存中是否存在密钥(如果存在),然后您可以使用该值,否则这意味着密钥已过期,您需要进行 API 调用。
if "key" in cache: # Will return false if 3 mins have surpassed
return cache["key"]
else:
value = #make api call and get value
cache["key"] = value # Will store the value for 3 mins
return value
推荐阅读
- vue.js - Electron Webpack Vue 全局变量
- xamarin.forms - Xamarin .Net Standard 2.0 的 ModernHttpClient 替代选项
- html - Bootstrap 列内容图像响应性
- rpgle - 使用 RPG 和 DSPF 转到文本字符串中的第 n 个字符
- android - 尝试在自定义布局中合并两个布局
- java - 如何使用流获取具有多个属性最大值的对象?
- javascript - 将具有动态键的对象数组转换为新数组
- c++ - 如何对抽象类对象进行排序
- xpath - 如何将几个正则表达式组合成一个?
- java - 存储/缓冲文件以便在 MediaPlayer 中快速访问 - File vs FileInputStream vs FileDescriptor