1. 程式人生 > 其它 >Redis如何保證快取資料一致性

Redis如何保證快取資料一致性

一致性問題主要包含兩種情況

  • 快取中有資料,那麼快取中的資料需要和資料庫中資料的值相同
  • 快取中本身沒有資料,那麼資料中的值必須是最新值

  除此之外就是快取不一致問題了

解決一致性問題首先要根據快取讀寫模式(讀寫快取、只讀快取)來進行分析

  讀寫快取(對快取進行增刪改)時有兩種方法

  1. 同步直寫

    寫快取時也同步寫資料庫,快取和資料庫中的資料一致

  1. 非同步寫回

  寫快取時不同步寫資料庫。如果資料還沒寫回到資料庫快取發生故障,會造成資料丟失,資料庫中不是 最新資料的情況

  只讀快取

    對於只讀快取來說,如果有資料新增則直接在資料庫中完成,如果有資料刪改則把快取中的資料標記為無效,再次請求資料時無法從快取中獲取,就會直接請求資料庫

  • 新增資料時,資料會直接寫入到資料庫中,不需要對快取進行操作,此時快取中沒有最新值,資料庫中有最新值,所以這時候快取和資料庫中的資料是一致的
  • 刪改資料時
    •   當刪除資料時
    •   如果先對快取中的資料進行了刪除,資料庫中的資料沒有完成刪除,快取中的資料缺失,然後會請求資料庫,這時候資料庫中的值為舊值,請求到的就是舊值。
    •   如果先對資料庫中的值進行刪除,快取中的資料沒有完成刪除,後續的資料請求就會直接請求到快取中的資料,仍然存在快取一致性問題。

  在只讀快取中,如果要保證快取一致性,我們可以採用重試機制來進行。可以把要刪除的快取值或者更新的資料值存入到訊息佇列中。當沒有成功的刪除快取值或者資料庫中的值時,可以從訊息佇列中重新讀取這些值,然後再進行刪除或者更新。如果成功的進行了刪除或者更新則將這些值從訊息佇列中去除避免重複操作。如果嘗試了一定次數,還是沒有成功則向業務層傳送報錯資訊。

本文來自部落格園,作者:我愛幽蘭異眾芳,轉載請註明原文連結:https://www.cnblogs.com/RainbowLan/p/15020382.html