問題背景:
在高併發場景下,更新快取中和資料和更新資料庫中的資料,都會存在併發性問題。
情況:(1) 刪除了redis的某條資料,還沒來得及刪除資料庫中的資料;此時乙個執行緒來讀,發現redis中沒有這條資料,它就從資料庫中讀取出的尚未刪除的資料,重新寫回redis中,造成redis刪除失效且髒資料
(2) 如果先更新資料庫,還沒來得及更新redis,那麼乙個執行緒來讀redis,讀到的不一致的資料;
難點:不論是先更新redis還是更新資料庫都會存在高併發不一致的問題,需要結合場景看是否能容忍;
思路:(1) 用redis快取,一般都是為了緩解資料庫讀效能瓶頸,讀的優先順序更高;因此資料更新,先更新redis再更新資料庫可以讀取出最新資料,
(2) 在刪除時,先刪除資料庫,在刪除redis,這樣的影響就是讀出來的資料實際上不存在,但是起碼下一次讀就讀不到了,影響較小;
Redis和資料庫快取一致性問題之我見
乙個經典的問題,redis經常被用來當作快取,那麼redis快取一致性怎麼解決?翻閱了網上很多資料,答案不一,這裡簡單整理一下我的看法。目錄2 先運算元據庫,後操作快取 2.2 先更新資料庫,再刪快取 3 個人總結 4 番外 從借鑑作業系統的一些方法 參考問題 髒寫 在併發的情況下,可能出現以下情況...
Redis和資料庫之間的資料一致性問題
redis和資料庫之間資料不一致的問題。在高併發場景下,同時有讀和寫的的操作,不管是先刪除快取,再寫資料庫,還是先寫庫,再刪快取,都有可能出現資料不一致的情況。1.如果先刪除快取,在寫資料庫之前,有個讀資料的執行緒發現快取為空,就去讀取資料庫,讀到的是髒資料,拿髒資料更新redis快取,導致了red...
Redis快取和資料庫雙寫一致性問題
資料庫與快取讀寫模式策略 寫完資料庫後是否需要馬上更新快取還是直接刪除快取?1 如果寫資料庫的值與更新到快取值是一樣的,不需要經過任何的計算,可以馬上更新快取,但是如果對於那種寫資料頻繁而讀資料少的場景並不合適這種解決方案,因為也許還沒有查詢就被刪除或修改了,這樣會浪費時間和資源 2 如果寫資料庫的...