1. 程式人生 > >分散式鎖 -- 基於redis實現

分散式鎖 -- 基於redis實現

基於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機制。

引自:https://mp.weixin.qq.com/s/tye9HNgDZzXOUwzo38Ftyg