More  

收藏本站

電腦請使用 Ctrl + D 加入最愛
手機請使用 收藏
關閉

小編的世界 優質文選 資料

MySQL與Redis緩存一致性問題


字體大小:
2021年10月29日 -
:     
 

進擊的小科

Redis就是一個使用C語言開發的數據庫,為了避免使用MySQL請求過多影響性能,就會采用它。高並發場景下保持mysql與redis數據的一致性問題不容忽視。

場景:線程A,修改數據,線程B使用數據。

1、雙刪策略:線程A寫數據時,先刪除redis的數據,然後修改mysql,之後再刪除redis的數據。

問題:線程A在修改mysql的時候,線程B先讀取了數據,接著線程A執行完畢,此時redis中沒有數據了,接著線程B處理業務然後設置redis緩存,此時redis中的數據還是線程A修改前的數據。

2、延遲雙刪策略:線程A寫數據時,先刪除redis的數據,然後修改mysql,之後再延遲一個業務時間後刪除redis的數據。

問題:該策略無法包括這個延遲時間;並且會影響系統的處理能力。

3、讀寫串行化:只要讀和寫是並發產生的就必然會存在,數據一致性問題。如果要徹底解決該問題,就要串行。該中方式會影響效率,如果采用可以做好壓力測試。

使用分布式鎖:影響效率

使用隊列:將操作同一資源的請求,打到同一個隊列中。

4、cancel:同步mysql的bin_log,更新redis。該方式也會存在延遲。

5、redis設置失效時間