基於Redis的分布式資源鎖
阿新 • • 發佈:2018-06-26
更新 連接 可用 必須 樂觀 就是 per 樂觀鎖 問題
隨著雙11,春運搶票這種業務的存在,分布式高並發成為了技術人員必須要面對的問題,那麽如果保證數據的準確性呢?一般主流的方式就是加鎖。
分布式鎖一般有三種實現方式:1. 數據庫樂觀鎖;2. 基於Redis的分布式鎖;3. 基於ZooKeeper的分布式鎖。
首先,為了確保分布式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件:
- 互斥性。在任意時刻,只有一個客戶端能持有鎖。
- 不會發生死鎖。即使有一個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證後續其他客戶端能加鎖。
- 具有容錯性。只要大部分的Redis節點正常運行,客戶端就可以加鎖和解鎖。
- 解鈴還須系鈴人。加鎖和解鎖必須是同一個客戶端,客戶端自己不能把別人加的鎖給解了。
具體的代碼實現請看這篇詳細的文章:
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的分布式資源鎖