分散式鎖 -- 基於redis實現
阿新 • • 發佈:2018-12-07
基於Redis實現的鎖機制,主要是依賴redis自身的原子操作,例如:
SET user_key user_value NX PX 100
redis從2.6.12版本開始,SET命令才支援這些引數:
NX:只在在鍵不存在時,才對鍵進行設定操作,SET key value NX 效果等同於 SETNX key value
PX millisecond:設定鍵的過期時間為millisecond毫秒,當超過這個時間後,設定的鍵會自動失效
上述程式碼示例是指,
當redis中不存在user_key這個鍵的時候,才會去設定一個user_key鍵,並且給這個鍵的值設定為 user_value,且這個鍵的存活時間為100ms
為什麼這個命令可以幫我們實現鎖機制呢?
因為這個命令是隻有在某個key不存在的時候,才會執行成功。那麼當多個程序同時併發的去設定同一個key的時候,就永遠只會有一個程序成功。
當某個程序設定成功之後,就可以去執行業務邏輯了,等業務邏輯執行完畢之後,再去進行解鎖。
解鎖很簡單,只需要刪除這個key就可以了,不過刪除之前需要判斷,這個key對應的value是當初自己設定的那個。
另外,針對redis叢集模式的分散式鎖,可以採用redis的Redlock機制。