redis 分佈式鎖 底層實現的原理

redis 分佈式鎖,一般使用開源的redisson

 

1.客戶端1的加鎖

第一個if 判斷 判斷鍵key是否存在

1判斷 key是否存在 exists key == 0 如果等於0 是 key 不存在

2.如果key 不存在,設置hset key argv2 1

3.設置key的過期時間 pexpire key argv1

第二個if判斷 判斷鎖是否是可重入

1.判斷key argv2是否存在,hexist key argv2 ==1 如果等於1 是可重入鎖

2. 如果是可重入鎖,對 key argv2 中的值進行+1 hincrby key argv2 1

3.設置key 的過期時間 pexpire key argv1

第三個判斷 如果key 已經存在,而且不是可重入鎖

1.設置pttl key 計算key的剩餘時間 while true 循環,不斷獲得鎖。

2.客戶端2獲得鎖

3.可重入鎖

4.watch dog的自動延期策略,默認是30s,每10s檢測一下

5.釋放鎖 1.每次對加鎖的次數減1,如果加鎖的次數==0,刪除對應的鍵

 

lua 腳本的優勢

1.不使用lua腳本的代碼,需要給redis 發送多次請求,而腳本只需要一次,減少網絡傳輸。

2.原子操作: redis 把整個lua腳本作爲一個原子執行,無需擔心併發,無需擔心事務

3.複用: lua腳本保存在redis中,可以被其他客戶端複用

 

參考:

1.https://redisson.org/

2.https://www.cnblogs.com/williamjie/p/11250679.html----- redis 分佈式鎖

3.https://www.cnblogs.com/barrywxx/p/8563284.html---- redis 保證lua 腳本的原子性

 

 

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