该类Cache
提供了一种在使用cache.cache(timeout=TIMEOUT)
. 但是,它不会在超时间隔后自动删除缓存。清除缓存的唯一方法是调用cache.clear()
which 清除整个缓存,而不是仅清除要清除的函数的缓存。
是否可以自动清除所有已超时的缓存?还有其他图书馆这样做吗?
该类Cache
提供了一种在使用cache.cache(timeout=TIMEOUT)
. 但是,它不会在超时间隔后自动删除缓存。清除缓存的唯一方法是调用cache.clear()
which 清除整个缓存,而不是仅清除要清除的函数的缓存。
是否可以自动清除所有已超时的缓存?还有其他图书馆这样做吗?
Flask-caching 没有任何机制来自动删除缓存/过期缓存。
但是在Simple
andFileSystemCache
模式下,它有一个CACHE_THRESHOLD
配置设置,如果缓存的数量超过threshold
设置,它将删除所有过期的缓存和每个索引可以被三整除的缓存。
Flask-cachingSimple
模式源码(1.10.1版本):
def _prune(self):
if len(self._cache) > self._threshold:
now = time()
toremove = []
for idx, (key, (expires, _)) in enumerate(self._cache.items()):
if (expires != 0 and expires <= now) or idx % 3 == 0:
toremove.append(key)
for key in toremove:
self._cache.pop(key, None)
logger.debug("evicted %d key(s): %r", len(toremove), toremove)
另外,CACHE_THRESHOLD
可以在初始化之前设置
from flask import Flask
from flask_caching import Cache
config = {
"CACHE_TYPE": "SimpleCache",
"CACHE_THRESHOLD": 300 # It can be setting before initializing
}
app = Flask(__name__)
app.config.from_mapping(config)
cache = Cache(app)
总的来说,如果你使用这些模式,你可以像上面的源代码一样编写调度作业来删除过期的缓存。