快取設計 併發更新的坑

2021-10-24 12:35:45 字數 916 閱讀 999

併發更新的坑指在併發更新快取的時候,會出現併發更新的異常問題。導致與預期結果不一致,有的甚至會導致應用短時間不可用。

常見實現方式如下:(對應下面case1和case2)

獲取access-token,如果存在則呼叫介面

實現方式二:(對應下面case3)

case3:無限遞迴獲取token

(1)取舊token,訪問介面,發現token過期;

(2)併發請求,取舊token,訪問介面,也發現token過期;

(3)去申請新token1;

(3)併發申請新token2(此時token1會過期);

(4)把token1放入快取,同時使用token1訪問介面(此時token1已經過期),發現token1過期,可能會遞迴申請新token3(此時token2過期);

(5)把token2放入快取,同時使用token2訪問介面(此時token2已經過期),發現token2過期,可能會遞迴申請新token4(此時token3過期);

併發更新導致了資料更新異常,順序的**邏輯被併發的更新打亂了。

分布式鎖

參考主流的分布式鎖方案,比如redis分布式鎖,或者zookeeper分布式鎖,在更新前上鎖,更新後釋放鎖。

同步併發更新 進化為 單執行緒非同步更新

a. 線上s1和s2只從快取讀取token

b. 更新token非同步,asy-master定期更新token,避免併發更新

c. 使用shadow-master保證token更新高可用,asy-master掛了,asy-backup頂上

高併發請求的快取設計策略

1.為何需要快取?在高併發請求時,為何我們頻繁提到快取技術?最直接的原因是,目前磁碟io和網路io相對於記憶體io的成百上千倍的效能劣勢。做個簡單計算,如果我們需要某個資料,該資料從資料庫磁碟讀出來需要0.1s,從交換機傳過來需要0.05s,那麼每個請求完成最少0.15s 當然,事實上磁碟和網路io...

高併發系統設計(三)快取 未完

廣義上講,凡是位於速度相差較大的兩種硬體之間,用於協調兩者資料傳輸速度差異的結構,均可稱之為快取 是一種常見的空間換時間的效能優化手段 快取區是用於彌補高速裝置和低速裝置通訊時的速度差。一塊臨時儲存資料的區域,這些資料後面會一次性傳輸到其他裝置上 系統複雜度 資料不一致 運維 記憶體有限,比較適合讀...

Redis 快取的坑

這幾天一直在做redis 快取,中間遇到很多錯誤,把網上的部落格都看一大半了,甚至開始懷疑是springboot 框架有問題出毛病了 對,就是他的錯,誰讓他報我的錯?他先動得手 後來發現是自己太蠢了,寫下來記錄記錄這個差點讓我放棄人生的蠢動作。redis快取的序列化器 網上看了很多的關於序列化的部落...