redis分布式鎖原理

2022-02-04 22:50:57 字數 604 閱讀 7154

舉例子:秒殺方式看醫生,乙個人看5min

1.第一次只允許乙個人直接進行來,x10:00:00進去了,setnx(roomid,now+5min),出來時間假如是10:05:00

2.時間到了10:05:00,3個人同時進來,需要去看牆上的鐘錶,乙個人乙個的看

a進入病房看到,看到鐘錶時間10:05:00,得到時間10:05:00,看完時候的時間是10:05:01

b進入病房看到,看到鐘錶時間10:05:01,得到時間10:05:01,看完時候的時間是10:05:02

c進入病房看到,看到鐘錶時間10:05:02,得到時間10:05:02,看完時候的時間是10:05:03

最後發現a的時間和進來的時間一致,所以得到看病機會,看完的時間將是 10:10:00,如此迴圈。

redis原理:

1.setnx(roomid,now+5min),roomid不存在就進行設定,並且返回1,否則不進行設定,並返回0;

2.getset(roomid,time),同步,只能乙個設定完成下乙個才進行設定,也就是有先後,同時得到返回值,roomid對應的值,也就是上乙個人設定留下的時間。對比為設定前的時間,一致的可以獲得鎖。

等待過期,下一輪的人可以進行設定

redis分布式鎖原理

以redisson為例 rlock lock redissonclient.getlock key lock.lock timeoutsecond,timeunit.seconds 原則 1.自己加的鎖自己釋放,2.鎖到期了業務沒執行完還需續期 if redis.call exists keys 1...

redis分布式鎖

redis分布式鎖 直接上 我寫了四個redis分布式鎖的方法,大家可以提個意見 第一種方法 redis分布式鎖 param timeout public void lock long timeout thread.sleep 100 catch exception e override publi...

Redis分布式鎖

分布式鎖一般有三種實現方式 1.資料庫樂觀鎖 2.基於redis的分布式鎖 3.基於zookeeper的分布式鎖.首先,為了確保分布式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件 互斥性。在任意時刻,只有乙個客戶端能持有鎖。不會發生死鎖。即使有乙個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保...