關於分布式鎖,一般有三種選擇,
1、redis
2、zk
3、DB鎖(悲觀鎖、樂觀鎖)
其中用的最多的應該是redis。
redis常用的方式有單節點、主從模式、哨兵模式、集群模式。
單節點在生產環境基本上不會使用,因為不能達到高可用,且連RDB或AOF備份都只能放在master上,所以基本上不會使用。
另外幾種模式都無法避免兩個問題:
1、異步數據丟失。
2、腦裂問題。
所以redis官方針對這種情況提出了紅鎖(Redlock)的概念。
假設有5個redis節點,這些節點之間既沒有主從,也沒有集群關系。客戶端用相同的key和隨機值在5個節點上請求鎖,請求鎖的超時時間應小於鎖自動釋放時間。當在3個(超過半數)redis上請求到鎖的時候,才算是真正獲取到了鎖。如果沒有獲取到鎖,則把部分已鎖的redis釋放掉。
附上官方Redlock鏈接地址:https://redis.io/topics/distlock