2

我有一个 Flask 应用程序,并且我已经实现了“Flask-Caching”扩展。我正在使用“FileSystemCache”方法。这对我来说是全新的,所以它可能工作正常,我不知道。

我发现当我调用 cache.clear() 时,我会看到项目从指定为我的缓存位置的目录中删除。但是,当我将超时设置为非常短时,当达到超时持续时间时,我看不到文件被删除。

我不确定它是否应该删除,或者我是否应该编写一个后台任务来删除所有早于超时设置的文件。每个文件都很小,但它们积累得非常快。

我要求有人告诉我这是否按预期工作。创建一个后台任务来清除目录是没有问题的,但这似乎应该是自动发生的。

就相关代码而言,没有太多:

cache = Cache(app,config={'CACHE_TYPE': 'filesystem', 
                      'CACHE_DIR': r"<my cache directory>", 
                      'CACHE_DEFAULT_TIMEOUT': 15})

超时只有 15 秒,以帮助我在这里进行测试,但稍后会增加。在我的代码中,我只真正使用了@cache.memoize() 和偶尔的cache.delete_memoized()。

4

1 回答 1

3

Flask-Caching 本身并不一定会在缓存项超时后自动删除。通常,它只会在执行某些操作时这样做。例如,在 中FileSystemCache,如果您查看函数的源代码,get()您会发现如果您尝试获取已过期的缓存项,它会删除文件并返回None.

此外,查看函数的源代码set(),您可以看到对_prune()源代码)的调用。这是一个内部函数(如果缓存文件的数量超过构造函数中设置的阈值)将遍历缓存目录中的文件并删除过期文件。

您没有看到任何文件被删除的原因可能是因为即使超时时间很短,阈值也可能足够高,以至于您没有缓存足够的文件来开始删除一些文件。您可以使用CACHE_THRESHOLDconfig 变量来设置可以缓存的最大文件数。

我希望这有帮助!

于 2019-09-20T13:38:55.640 回答