首页 > 解决方案 > 有没有办法在本地缓存 python 字典,并使单个记录定期过期?

问题描述

我正在通过 python 脚本进行外部 API 调用,调用的每个响应都是 JSON 格式的字典。

API 的响应不会经常更改,可能每 3 个月左右更改一次。理想情况下,我想做的是在 API 参数和响应之间创建一个键值对。

我也不希望所有记录都过期,在清除缓存时,只需检查 cacheFile/localDatabase 中的参数,然后决定是否删除该记录。如果该参数存在值,则查看该记录是否超过“生存时间”,如果没有,则使用该值,如果有,则使用 API 函数进行调用并替换该值. 如果该值不存在,则创建一个新条目。

我每次都需要为我的脚本访问这个字典,以收集有关参数的信息。

我尝试了泡菜和泡菜转储,但似乎这绝对是一个糟糕的主意,因为它会清除整个缓存而不是已过期的密钥。

是否有可以提供有用信息的链接,我不确定我是否在搜索正确的术语。

谢谢您的帮助。

标签: pythonpython-3.xdictionarycaching

解决方案


有一个名为的 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

参考:https ://pypi.org/project/expiringdict/


推荐阅读