面試官:Redis用過?說說Redis加解分佈鎖的正確方式

  • 2019 年 11 月 22 日
  • 筆記

一、分佈式鎖方案比較

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

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

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

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

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

調用lua腳本進行解鎖,保證原子性;

Lua腳本實現:判斷key的值和我們存入的UUID隨機數是不是相等,是的話,則調用DEL指令進行刪除操作;

六、加鎖代碼

1. 實現類繼承LOCK類部分代碼

2. 阻塞式加鎖代碼

3. 非阻塞式加鎖代碼

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

八、解鎖代碼

1. 解鎖代碼截圖

2. Unlock.lua腳本代碼

基於Redis分佈式鎖的教學