带自动过期的Timetolive(TTL)缓存
autottlcache的Python项目详细描述
自动缓存
一个具有自动过期的生存时间(TTL)缓存字典。在
安装
要从PyPI安装:
$ pip install autottlcache
使用
TTL缓存的行为非常类似于字典。实际上,它是一个MutableMapping
,因此支持
字典接口。但是它有一个重要的区别,那就是它里面的项目
过期并自动删除。在
让我们创建一个AutoTTLCache
,最大大小为12个实体,TTL为30秒:
我们可以向缓存中添加条目:
>>> cache[1] = 56
>>> cache[2] = 89
>>> cache[3] = 99
>>> cache[4] = 10
>>> cache[5] = 20
并通过反复请求缓存列出其密钥来观察它们的过期:
>>> list(cache.keys())
[2, 3, 4, 5]
我们花了很长时间添加第一个已经过期的密钥:
>>> list(cache.keys())
[3, 4, 5]
现在第二个也不见了:
>>> list(cache.keys())
[3, 4, 5]
这一次我们很快就可以在第三个过期之前进入:
>>> list(cache.keys())
[3, 4, 5]
>>> list(cache.keys())
[3, 4, 5]
>>> list(cache.keys())
[3, 4, 5]
>>> list(cache.keys())
[4, 5]
>>> list(cache.keys())
[4, 5]
>>> list(cache.keys())
[4, 5]
>>> list(cache.keys())
[5]
>>> list(cache.keys())
[5]
>>> list(cache.keys())
[5]
>>> list(cache.keys())
[5]
>>> list(cache.keys())
[5]
>>> list(cache.keys())
[]
全都消失了。在
当调用缓存对象上的操作时,将从缓存中删除过时的项,例如 当一个项目被检索时,或者由一个连续运行的后台线程周期性地 删除过期项目。将以10倍于TTL周期的频率检查缓存,因此 缓存中TTL为30秒的项的生存时间不应超过33秒。在
编程风格
由于项目将自动过期,为了避免竞争条件,您应该强烈建议 一种比权限(EAFP)编程风格更容易请求原谅,而不是外观 在你跳跃之前的风格。在
危险比赛条件:
from autottlcache import AutoTTLCache
cache = AutoTTLCache(maxsize=100, ttl=30)
cache["daffodils"] = Image("daffodils-3280x2040.png")
# ...
if "daffodils" in cache:
# What happens if "daffodils" expires here?
image = cache["daffodils"] # This could raise a key error which is unhandled
else:
print("No flowers for you!")
最好使用单个操作检索对象并处理失败:
from autottlcache import AutoTTLCache
cache = AutoTTLCache(maxsize=100, ttl=30)
cache["daffodils"] = Image("daffodils-3280x2040.png")
# ...
try:
image = cache["daffodils"]
except KeyError:
print("No flowers for you!")
else:
display(image)
资源利用
在一个或多个AutoTTLCache
物体是现存的。线程将在创建第一个AutoTTLCache
时启动,并且
在最后一个AutoTTLCache
完成后立即终止。在
发展
要释放,需要一个简短的手动过程:
$ bumpversion patch
$ python setup.py sdist bdist_wheel
$ twine upload dist/* --config-file=path/to/sixty-north.pypirc
- 项目
标签: