Redis分散式鎖解析

若小寒發表於2019-03-23

原文 blog.csdn.net/zhongguoren…

一、分散式鎖方案比較

Redis分散式鎖解析

二、關於Redis分散式鎖基礎知識

Redis分散式鎖解析

三、Redis 加解分佈鎖的正確姿勢

Redis分散式鎖解析

四、Redis 分散式加鎖的主要流程

  1. 產生隨機數,可用 UUID ,儲存起來,一般儲存在 ThreadLocal 中,以便解鎖用;
  2. 呼叫Redis 的 SETNX 命令將隨機數當作 value 存入 ,key為taskId,同時 設定過期時間 。(實際專案中過期時間的多少主要是取決任務估算的執行時間,一般為估算執行時間*2,如該任務的估算時間是2m,則過期就要設定4m);
  3. 如果返回ok,說明加鎖成功,否則失敗;

五、Redis分散式解鎖的主要流程

  1. 呼叫 lua 指令碼 進行解鎖,保證原子性;
  2. Lua指令碼實現: 判斷 key 的值和我們存入的 UUID 隨機數是不是相等 ,是的話,則呼叫 DEL 指令 進行刪除操作;

六、加鎖程式碼

1. 實現類繼承 LOCK 類部分程式碼

Redis分散式鎖解析

2. 阻塞式加鎖程式碼

Redis分散式鎖解析

3. 非阻塞式加鎖程式碼

Redis分散式鎖解析

七、用 ThreadLocal 儲存加鎖產生的隨機值

Redis分散式鎖解析

八、解鎖程式碼

1. 解鎖程式碼截圖

Redis分散式鎖解析

2. Unlock.lua 指令碼程式碼

Redis分散式鎖解析

最後

此文是一個博主的寫的無意間看到圖片裡的享學,之前聽過他們的公開課感覺講解得挺好,大家覺得不錯可以點個贊在關注下,以後還會分享更多文章!


相關文章