面試官: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腳本代碼