Redis 實現分佈式鎖
單機模式的Redis分佈式鎖
優缺點
實現比較輕,大多數時候能滿足需求;因為是單機單實例部署,如果redis服務宕機,那麼所有需要獲取分佈式鎖的地方均無法獲取鎖,將全部阻塞,需要做好降級處理。
當鎖過期後,執行任務的進程還沒有執行完,但是鎖因為自動過期已經解鎖,可能被其它進程重新加鎖,這就造成多個進程同時獲取到了鎖,這需要額外的方案來解決這種問題。
實現代碼
![Redis入門(七):Redis分佈式鎖(單機模式/集群模式)](http://p2.ttnews.xyz/loading.gif)
![Redis入門(七):Redis分佈式鎖(單機模式/集群模式)](http://p2.ttnews.xyz/loading.gif)
集群模式的Redis分佈式鎖 Redlock
優缺點
Redlock是Redis的作者antirez給出的集群模式的Redis分佈式鎖,它基於N個完全獨立的Redis節點
部分節點宕機,依然可以保證鎖的可用性
當某個節點宕機後,又立即重啟了,可能會出現兩個客戶端同時持有同一把鎖,如果節點設置了持久化,出現這種情況的幾率會降低
和單機模式Redis鎖相比,實現難度要大一些
實現代碼
搭建redis集群
腳本執行後,出現如下日誌,說明集群搭建成功
redis-cluster簡單集群示例圖
使用Redission構建redLock
Redis集群使用分片的方式保存鍵值對,redis-cluster採用slot(槽)的概念,一共16384個槽位,分佈在集群中的所有master實例上。保存數據時,直接對key值做CRC16校驗後得到的校驗值對16384取模,將鍵值對存儲到對應的槽位所在的實例上。
---------------------
原文:https://blog.csdn.net/haiyoung/article/details/83038690
閱讀更多 Haiyoung666 的文章