redis實現分布式鎖,set介面詳解

2021-09-01 06:34:00 字數 1034 閱讀 8439

非常詳細,這裡就不需贅述了。

首先,為了確保分布式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件:

互斥性。在任意時刻,只有乙個客戶端能持有鎖。

不會發生死鎖。即使有乙個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證後續其他客戶端能加鎖。

具有容錯性。只要大部分的redis節點正常執行,客戶端就可以加鎖和解鎖。

解鈴還須繫鈴人。加鎖和解鎖必須是同乙個客戶端,客戶端自己不能把別人加的鎖給解了。

string set(string key, string value, string n***, string expx, long time);

該方法是: 儲存資料到快取中,並制定過期時間和當key存在時是否覆蓋。

n***: 只能取nx或者xx,如果取nx,則只有當key不存在是才進行set,如果取xx,則只有當key已經存在時才進行set

expx: 只能取ex或者px,代表資料過期時間的單位,ex代表秒,px代表毫秒。

time: 過期時間,單位是expx所代表的單位。

判斷redis是否存在方法:

1:jedis.get(「ts1」)的是否為-2,如果是-2,則不存在鍵。為-1鍵存在。

2:jedis.exists(「ts1」),值為true,存在,否則不存在。

我不禁反思,當時我學redis的時候好像不記得有這個介面,難道是版本的問題?

看看版本:

最新的是2.9.0,開啟我當時學習的版本是2.1.0,

其實這個介面是從2.2.0開始才有的,我用的版本太老了,

總結:學習新的技術一定要看最新的官方文件,別人的寫的部落格可能存在一些問題,即使沒有問題,也可能由於寫的過早從而導致落後。

redis官方文件:

redis所有命令:

參考部落格:

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

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

redis實現分布式鎖

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

redis實現分布式鎖

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