1. 程式人生 > 實用技巧 >mysql和Redis資料不一致的解決辦法

mysql和Redis資料不一致的解決辦法

1、mysql和redis資料讀寫不一致?

業務場景

從理論上來說,給快取設定過期時間,是保證最終一致性的終極解決方案。這種方案下,我們可以對存入快取的資料設定過期時間,所有的寫操作以資料庫為準,對快取操作只是盡最大努力即可。也就是說如果資料庫寫成功,快取更新失敗,那麼只要到達過期時間,則後面的讀請求自然會從資料庫中讀取新值然後回填快取。因此,接下來討論的思路不依賴於給快取設定過期時間這個方案。

採用延時雙刪策略

程式碼如下

publicvoid use(Stringkey,Objectdata){

redis.delKey(key);

db.updateData(data);

Thread.sleep(800);

redis.delKey(key);

}

  

轉化為中文描述就是

(1)先淘汰快取
(2)再寫資料庫(這兩步和原來一樣)
(3)休眠800ms,再次淘汰快取
這麼做,可以將800ms內所造成的快取髒資料,再次刪除。

那麼,這個時間怎麼確定的,具體該休眠多久呢?

針對上面的情形,讀者應該自行評估自己的專案的讀資料業務邏輯的耗時。然後寫資料的休眠時間則在讀資料業務邏輯的耗時基礎上,加幾百ms即可。這麼做的目的,就是確保讀請求結束,寫請求可以刪除讀請求造成的快取髒資料。