分佈式鎖實現方式

1、數據庫的唯一索引實現

      獲得鎖時向表中插入一條記錄,釋放鎖時刪除這條記錄。唯一索引可以保證該記錄只被插入一次,那麼就可以用這個記錄是否存在來判斷是否存於鎖定狀態。

   缺點:

  • 鎖沒有失效時間,解鎖失敗的話其它進程無法再獲得該鎖。

  • 只能是非阻塞鎖,插入失敗直接就報錯了,無法重試。

  • 不可重入,已經獲得鎖的進程也必須重新獲取鎖。

2、Redis的SETNX指令實現

使用 SETNX(set if not exist)指令插入一個鍵值對,如果 Key 已經存在,那麼會返回 False,否則插入成功並返回 True。

SETNX 指令和數據庫的唯一索引類似,保證了只存在一個 Key 的鍵值對,那麼可以用一個 Key 的鍵值對是否存在來判斷是否存於鎖定狀態。

EXPIRE 指令可以爲一個鍵值對設置一個過期時間,從而避免了數據庫唯一索引實現方式中釋放鎖失敗的問題。

3、Zookeeper的有序節點實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章