上一篇說到緩存的更新操作是非冪等操作,會出現併發更新的問題。那用緩存刪除操作實現緩存更新行不行,您可能覺得奇怪,刪除了緩存如何更新,假設讀業務先讀取緩存,如果發現沒有就回溯到讀資料庫找數據,然後再更新回緩存。這種方式叫做懶載入,是在查詢到資料庫時,主動更新緩存。就是說刪除同樣能達到更新緩存的目的,為 ...
上一篇說到緩存的更新操作是非冪等操作,會出現併發更新的問題。那用緩存刪除操作實現緩存更新行不行,您可能覺得奇怪,刪除了緩存如何更新,假設讀業務先讀取緩存,如果發現沒有就回溯到讀資料庫找數據,然後再更新回緩存。這種方式叫做懶載入,是在查詢到資料庫時,主動更新緩存。就是說刪除同樣能達到更新緩存的目的,為什麼要用刪除,因為刪除操作是沒狀態的,無論刪除多少次,它的結果都是一樣的,所以是天然的冪等操作。現在問題轉移到,如何在數據更新或添加時保證緩存清除乾凈的問題。 刪除是冪等操作,直接刪除不就行了嗎,為什麼還要保證緩存清除乾凈。因為懶載入的方式,也有緩存更新操作,如果寫業務在更新資料庫前刪除緩存,還沒更新完數據,此時讀業務請求過來發現沒有緩存,懶載入讀到舊數據更新緩存,這樣緩存里還是臟數據。既然不能在更新數據之前刪除,那就在更新數據之後刪除,但是在更新完資料庫後,刪除緩存失敗了,怎麼辦,緩存里仍然是舊數據。所以要在更新資料庫前後都刪除緩存,這個就是緩存雙刪策略。
