1. 程式人生 > >基於Redis的分布式資源鎖

基於Redis的分布式資源鎖

更新 連接 可用 必須 樂觀 就是 per 樂觀鎖 問題

隨著雙11,春運搶票這種業務的存在,分布式高並發成為了技術人員必須要面對的問題,那麽如果保證數據的準確性呢?一般主流的方式就是加鎖。

分布式鎖一般有三種實現方式:1. 數據庫樂觀鎖;2. 基於Redis的分布式鎖;3. 基於ZooKeeper的分布式鎖。

首先,為了確保分布式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件:

  1. 互斥性。在任意時刻,只有一個客戶端能持有鎖。
  2. 不會發生死鎖。即使有一個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證後續其他客戶端能加鎖。
  3. 具有容錯性。只要大部分的Redis節點正常運行,客戶端就可以加鎖和解鎖。
  4. 解鈴還須系鈴人。加鎖和解鎖必須是同一個客戶端,客戶端自己不能把別人加的鎖給解了。

具體的代碼實現請看這篇詳細的文章:

http://www.cnblogs.com/0201zcr/p/5942748.html

推薦一篇電商秒殺的架構思路,這位作者寫的太好了:

https://blog.csdn.net/bigtree_3721/article/details/72760538

秒殺架構劃重點:

(1)將秒殺系統單獨部署,甚至使用獨立域名,防止秒殺系統崩潰影響正常業務

(2)頁面內容靜態化,讀多寫少的接口做好緩存

(3)將下單頁面的Url作為隨機數,在秒殺開始的時候才能得到

(4)前端控制請求發送

(5)采用最少連接的負載均衡算法

(6)拍下減庫存比付款減庫存用戶體驗更好一些

(7)數據庫采用樂觀鎖(采用帶版本號更新)

基於Redis的分布式資源鎖