原文 blog.csdn.net/zhongguoren…
一、分散式鎖方案比較
二、關於Redis分散式鎖基礎知識
三、Redis 加解分佈鎖的正確姿勢
四、Redis 分散式加鎖的主要流程
- 產生隨機數,可用 UUID ,儲存起來,一般儲存在 ThreadLocal 中,以便解鎖用;
- 呼叫Redis 的 SETNX 命令將隨機數當作 value 存入 ,key為taskId,同時 設定過期時間 。(實際專案中過期時間的多少主要是取決任務估算的執行時間,一般為估算執行時間*2,如該任務的估算時間是2m,則過期就要設定4m);
- 如果返回ok,說明加鎖成功,否則失敗;
五、Redis分散式解鎖的主要流程
- 呼叫 lua 指令碼 進行解鎖,保證原子性;
- Lua指令碼實現: 判斷 key 的值和我們存入的 UUID 隨機數是不是相等 ,是的話,則呼叫 DEL 指令 進行刪除操作;
六、加鎖程式碼
1. 實現類繼承 LOCK 類部分程式碼
2. 阻塞式加鎖程式碼
3. 非阻塞式加鎖程式碼
七、用 ThreadLocal 儲存加鎖產生的隨機值
八、解鎖程式碼
1. 解鎖程式碼截圖
2. Unlock.lua 指令碼程式碼
最後
此文是一個博主的寫的無意間看到圖片裡的享學,之前聽過他們的公開課感覺講解得挺好,大家覺得不錯可以點個贊在關注下,以後還會分享更多文章!