1、Redis分佈式鎖
一、線程調用setnx(lockkey,currentTime+timeout),設置成功,也就是返回true,給這個key設置有效期;
二、設置成功,調用expire(lockkey,timeout),設置鎖的過時時間,執行業務,而後調用del(lockkey),釋放鎖。
三、設置失敗,表示當前鎖正在使用,則調用get(lockkey) 獲得valueA;
四、若是valueA!=null && currentTime (當前時間毫秒數)>valueA,表示超時,執行5;
五、超時時,調用getset(lockkey,currentTime+timeout) 獲得valueB,若是valueB ==null || valueA == valueB,得到鎖操做步驟6,不然說明鎖被其餘線程獲取了;
六、處理完業務邏輯,再去判斷鎖是否超時,若是沒超時刪除鎖,若是已超時,不用處理。
流程如圖: node