分佈式鎖是什麼?爲什麼使用分佈式鎖?分佈式鎖實現方式?

分佈式鎖是多個jvm可以共享的鎖。
傳統java併發API只適用於單個jvm,多個jvm對臨界區訪問就無法使用,所以需要分佈式鎖。
實現方式1:
使用mysql數據庫:創建一個表使用方法名字段(需要加鎖的字段)作爲唯一索引,獲取鎖的時候執行插入,釋放鎖的時候執行刪除
缺點:1.不阻塞 2.單點可用性差 3.沒有失效時間 4.不可重入
改進方式: 1.循環獲取鎖 2.集羣方式 3.設置定時任務 5.加入一個字段統計入鎖次數
實現方式2:
使用redis:獲取鎖set 釋放鎖 del
缺點:1.不阻塞 2.單點可用性差 3.沒有失效時間 4.不可重入
改進方式: 1.循環獲取鎖 2.集羣方式 3.設置過期時間 5.加入一個字段統計入鎖次數
實現方式3:
使用zookeeper:獲取鎖的時候在持久化結點下創建臨時時序結點。如果此臨時時序結點是第一個結點就獲取到鎖。如果不是就監聽前一個結點,當前一個結點消失變獲取到鎖。
釋放鎖的時候斷開連接就可以刪除結點

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