參考資料:《Redis開發與運維》
何爲緩存不一致?
緩存層與存儲層在一定時間窗口內存在數據不一致的情況,稱此爲緩存不一致。
緩存中的數據通常是有生命週期的,需要在指定的時間後更新或刪除,這樣就可以保證緩存空間在一個可控的範圍之內。Redis對此提供了一些策略來更新數據。
算法剔除
Redis提供了一些更新算法,LRU、LFU等等。
使用場景:通常應用於緩存使用量超過了預設的最大值的時候,對現有的數據進行剔除。例如Redis使用maxmemory-policy配置了內存的最大使用值。
一致性較差,但是運維成本低,只需簡單配置即可。
超時剔除
使用場景:通過給緩存數據設置過期時間,讓其在過期後自動刪除。
一致性較差(如果應用方接受在一定時間窗口內緩存數據不一致),運維成本低,設置過期時間即可。
主動更新
使用場景:應用方對數據一致性要求比較高,需要在真實數據更新後,立即更新緩存中的數據。(可以藉助MQ解耦)
一致性較高,運維成本也高。需要對主動更新機制進行代碼開發。
最佳實踐
1.低一致性業務,直接配置maxmemory-policy即可,或設置過期時間。
2.高一致性業務,超時剔除+主動更新聯合使用,已確保在主動更新失敗的情況下,緩存最終由於過期依然會更新數據。