redis實現分布式鎖

2022-08-02 08:06:12 字數 735 閱讀 7914

setnx key value

key設定值為value,如果key不存在,這種情況下等同set命令。 當key存在時,什麼也不做。setnx是」setifnot exists」的簡寫。

integer reply, 特定值:

##例子

redis> setnx mykey "hello"

(integer) 1

redis> setnx mykey "world"

(integer) 0

redis> get mykey

"hello"

redis>

如果客戶端獲取鎖成功,那麼setnx返回1,否則返回0;

為防止出現死鎖,需要setnx 時設定有效時間,已防止遲持有鎖的客戶端崩潰時,無法釋放鎖,形如:

setnx lock.foo 

為了使這種加鎖演算法更加的健壯,持有鎖的客戶端應該總是要檢查是否超時,保證使用del釋放鎖之前不會過期,因為客戶端故障的情況可能是複雜的,不止是崩潰,還會阻塞一段時間,阻止一些操作的執行,並且在阻塞恢復後嘗試執行del(此時,該lock已經被其他客戶端所持有)

分布式鎖 使用Redis實現分布式鎖

關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...

redis實現分布式鎖

隨便 系統越來越大,各功能模組除了垂直切割以外,同時也得做集群處理,那麼問題來了,在多執行緒情況下對於資源的競爭就需要乙個統一的訪問限制。以選課系統為例子,集群中各節點對課程可選數量同時操作,這裡就需要同步了,否則會導致最後選到的數量比可選的數量大,這裡我們的分布式鎖就派上用場了。利用redis來實...

redis實現分布式鎖

分布式鎖可以基於很多種方式實現,比如zookeeper redis.不管哪種方式,他的 基本原理是不變的 用乙個狀態值表示鎖,對鎖的占用和釋放通過狀態值來標識。1 使用redis的setnx命令實現分布式鎖 1 實現的原理 redis為單程序單執行緒模式,採用佇列模式將併發訪問變成序列訪問,且多客戶...