【问题标题】:Flask-Caching FileSystemCache method does not delete cache items upon timeoutFlask-Caching FileSystemCache 方法在超时时不会删除缓存项
【发布时间】:2020-01-20 18:40:00
【问题描述】:

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

【问题讨论】:

    标签: python caching flask flask-caching


    【解决方案1】:

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

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

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

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 2022-11-25
      • 1970-01-01
      • 2012-02-10
      • 2020-10-29
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多