mysql和Redis數據不一致的解決辦法


1、mysql和redis數據讀寫不一致?

     業務場景

 

 

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

采用延時雙刪策略

代碼如下

public void use(String key,Object data){

        redis.delKey(key);

        db.updateData(data);

        Thread.sleep(800);

        redis.delKey(key);

    }

  

轉化為中文描述就是

(1)先淘汰緩存
(2)再寫數據庫(這兩步和原來一樣)
(3)休眠800ms,再次淘汰緩存
這么做,可以將800ms內所造成的緩存臟數據,再次刪除。

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

針對上面的情形,讀者應該自行評估自己的項目的讀數據業務邏輯的耗時。然后寫數據的休眠時間則在讀數據業務邏輯的耗時基礎上,加幾百ms即可。這么做的目的,就是確保讀請求結束,寫請求可以刪除讀請求造成的緩存臟數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM