我正在实现 functools.lru_cache 的小型“持久”版本,其中“持久”意味着缓存不会在后续运行之间被破坏。为此,我想我可以简单地用 shelve 替换 functools.lru_cache
使用的字典。对象,但我遇到了 shelve
对键为 str
的要求。我尝试使用 str(hash(...).to_int(...))
修复它,但是 hash(...)
is not identical for identical cpython 解释器的不同运行之间的对象。
是否有像 shelve
这样的类允许任何可散列的键,而不仅仅是 str
ings,同时像字典一样透明地访问?
一些细节:我的缓存可能在 100MB 左右。它的阅读频率较高,编写频率较低。
最佳答案
具体的解决方案实际上取决于您的需求,但您可能会发现使用数据库是最适合您的情况的解决方案。您也可以使用 pickle
代替 shelve,但这当然有其缺点。
- 缓存大吗?
然后你需要一个解决方案来避免在每次访问时读取/写入整个缓存(例如基于 pickle 的解决方案),例如一个数据库。
- 是否经常访问?
那么您可能还需要一个内存缓存来避免频繁的缓慢外部访问。
快速谷歌搜索发现:persistentdict .
另见 this question .
关于python - 持久字典,其中键可以是任何可哈希的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399251/