分佈式鎖

> setnx lock:XXXX true

... 業務處理 ...

> del lock:XXXX 

(integer) 1

這裏有個問題,就是當“業務處理”發生死循環時,釋放鎖的操作就永遠不會發生,爲了避免這種情況發生,進行如下改進:

> setnx lock:XXXX true

> expire lock:XXXX 5

... 業務處理 ...

> del lock:XXXX 

(integer) 1

這裏通過expire添加時間限制,這樣,無論“業務處理”發生什麼,都能確保釋放鎖。

這裏,setnx與expire是兩個獨立的指令,這就導致了setnx與expire之間可能發生異常,還是會導致無法釋放鎖,於是Redis2.8的時候,通過在set添加擴展參數的方式,把setnx、expire指令融合到一起。

發佈了167 篇原創文章 · 獲贊 10 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章