簡體   English   中英

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中,如果您查看get() function 的源代碼,您會看到如果您嘗試獲取已過期的緩存項,它會刪除文件並返回None

此外,查看set() function 的源代碼,您可以看到對_prune()的調用( 源代碼)。 這是一個內部function(如果緩存文件的數量超過構造函數中設置的閾值)將go通過緩存目錄中的文件刪除過期文件。

您沒有看到任何文件被刪除的原因可能是因為即使超時時間很短,閾值也可能足夠高,以至於您沒有緩存足夠的文件來開始刪除一些文件。 您可以使用CACHE_THRESHOLD配置變量來設置可以緩存的最大文件數。

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM