Flask-Caching FileSystemCache 方法不会在超时时删除缓存项

Flask-Caching FileSystemCache method does not delete cache items upon timeout

我有一个 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().

Flask-Caching 本身不一定会在超时后自动删除缓存项。通常,它只会在执行某些操作时这样做。例如,在 FileSystemCache 中,如果您查看 source code for the get() function 可以看到,如果您尝试获取已过期的缓存项,它会删除该文件并且 returns None.

此外,正在查看 source code for the set() function, you can see the call to _prune() (source code)。这是一个内部函数,它(如果缓存文件的数量超过构造函数中设置的阈值)将遍历缓存目录中的文件并删除过期文件。

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

希望对您有所帮助!