面試官:Redis用過?說說Redis加解分布鎖的正確方式
- 2019 年 11 月 22 日
- 筆記
一、分散式鎖方案比較

二、關於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腳本程式碼

基於Redis分散式鎖的教學
