redis和mysql結合資料一致性方案

2022-06-05 06:54:09 字數 744 閱讀 5837

快取由於高併發高效能,已經被廣泛的應用。在讀取快取方面做法一致。流程如下:

1.先更新資料庫,再更新快取

2.先更新資料庫,再刪除快取。

這套方案,基本不推薦使用。

原因一:(執行緒安全角度)同時請求a和請求b進行更新操作,會出現。

由於網路原因出現a更新快取比b慢,這就導致了髒資料,因此不考慮。

原因二:(業務場景)

總結:不建議使用該種 解決方案。

方案存在的問題?

假設有兩個請求,乙個請求a做查詢操作,乙個請求b做更新操作。會有如下情況發生:

如上情況,會發生髒資料。

在資料庫做讀寫分離的情況下,如果出現網路延遲,寫庫同步讀庫的時候,另外乙個執行緒讀取讀庫舊資料,就會對發生髒資料。

如何解決?

採用延時雙刪模式:

延遲1秒會造成整體吞吐量降低,可以採用非同步方式處理。

如果第二次刪除,刪除失敗怎麼辦?

提供重試機制

訊息佇列非同步補償機制:

如果覺得如上方案對**的侵入性太大,可以代用如下方案。

訂閱mysql的binlog日誌:

訂閱mysql的binlog程式有現成的中介軟體canal。

參考:

Redis與MySQL的結合

目前大部分網際網路公司使用mysql作為資料的主要持久化儲存,那麼如何讓redis與mysql很好的結合在一起呢?我們主要使用了一種基於mysql作為主庫,redis作為高速資料查詢從庫的異構讀寫分離的方案。為此我們專門開發了自己的mysql複製工具,可以方便的實時同步mysql中的資料到redis...

AES與RSA相結合資料加密方案

rsa演算法是公開金鑰系統的代表,其安全性建立 在具有大素數因子的合數,其因子分解困難這一法則之上的。rijndael演算法作為新一代的高階加密標準,執行時不需要計算機有非常高的處理能力和大的內 存,操作可以很容易的抵禦時間和空間的攻擊,在不同的執行環境下始終能保持良好的效能。這使aes將安全,高效...

redis有序集合資料結構

zset資料結構類似於set結構,只是zset結構中,每個元素都會有乙個分值,然後所有元素按照分值的大小進行排列,相當於是乙個進行了排序的鍊錶。如果zset是乙個鍊錶,而且內部元素是有序的,在進行元素插入和刪除,以及查詢的時候,就必須要遍歷鍊錶才行,時間複雜度就達到了o n 這個在以單執行緒處理的r...