1

该类Cache提供了一种在使用cache.cache(timeout=TIMEOUT). 但是,它不会在超时间隔后自动删除缓存。清除缓存的唯一方法是调用cache.clear()which 清除整个缓存,而不是仅清除要清除的函数的缓存。

是否可以自动清除所有已超时的缓存?还有其他图书馆这样做吗?

4

1 回答 1

0

Flask-caching 没有任何机制来自动删除缓存/过期缓存。

但是在SimpleandFileSystemCache模式下,它有一个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)

总的来说,如果你使用这些模式,你可以像上面的源代码一样编写调度作业来删除过期的缓存。

于 2021-06-25T21:47:15.553 回答