對於我的應用程序,我將地圖圖像存儲在外部存儲器的緩存中,以減少對我正在使用的API的調用。由於這些數據是地圖數據,因此會隨時間而變化。因此,這些圖像應該每隔一段時間更新一次。定期刪除外部緩存目錄
如何以編程方式定期刪除緩存目錄?舉例來說,每週。
一些額外的想法: 也許刪除整個目錄並不是最好的方法去解決它。也許我可以檢查每個圖像的「新鮮度」,並刪除舊圖像?
對於我的應用程序,我將地圖圖像存儲在外部存儲器的緩存中,以減少對我正在使用的API的調用。由於這些數據是地圖數據,因此會隨時間而變化。因此,這些圖像應該每隔一段時間更新一次。定期刪除外部緩存目錄
如何以編程方式定期刪除緩存目錄?舉例來說,每週。
一些額外的想法: 也許刪除整個目錄並不是最好的方法去解決它。也許我可以檢查每個圖像的「新鮮度」,並刪除舊圖像?
是的,通過某種方法限制緩存通常是個好主意。某些緩存具有固定的大小,並且一旦超過緩存大小,舊的內容將被刪除。此大小可以是磁盤空間中項目數量或大小的計數。一些緩存對每個項目都有TTL(或者對於所有項目都有相同的TTL),因此項目在一定時間後過期。有些緩存可能永不過期。也許它的大小可能會被緩存在首位。任何這些方法都是有效的,儘管某些方法可能比其他方案更適合某些情況。
「新鮮」的想法可能是我會考慮的一種方法。這和TTL是一樣的。基本上你想設置一段時間,你的緩存項目將生存。將緩存時間與緩存數據一起存儲,然後每當讀取緩存數據時檢查一次。如果超過了過期日期,則可以刪除該緩存文件並再次從API中檢索映射數據(並緩存該數據)。如果您不想單獨存儲日期,並且在應用程序中使用硬編碼或可配置的固定生命週期,那麼您也可以僅僅通過閱讀文件創建時間來做些事情。
更新,以解決意見:
我用前過散列URL作爲文件名。只要意識到碰撞的可能性(當然高度依賴於你的散列算法和你的數據集)。另外,如果你經歷了很多網址,你的散列算法的性能可能也很重要。
將緩存元數據存儲在文本文件中沒有問題,特別是如果您沒有大量的URL。你會想要小心你如何更新該文本文件。如果您不小心並且在沒有正確同步的情況下從多個線程訪問它,則可能會輕易地破壞它。如果你有很多數據,你可以考慮的另一個選擇是使用數據庫。如果您確實將此緩存元數據存儲在文件中(無論是數據庫文件還是文本文件),則可以通過爲文件名使用不同的方案來避免散列問題。例如,您可以以十六進制或基數36爲單位遞增。
爲了增加這一點,您可以使用AlarmManager,如果它對您每週清理一次非常重要,而不是在您的應用下次運行並抓取緩存數據時。 –
謝謝你的答案kabuko。你會如何建議存儲與每個圖像相關的ttl值?我使用以用於調用API的URL的哈希值命名的文件來保存每個圖像。你認爲用hash值存儲一個pair值,並在txt文件中存儲ttl時間戳嗎?我正在尋找一個優雅的解決方案。謝謝! –
好問題,我在答案中增加了更多細節。 – kabuko