正確方式實現Redis分布式鎖

2021-08-14 13:01:22 字數 887 閱讀 5423

實現分布式鎖的方式有很多:

1) zookeeper

2)redis

3)阿里開源等。。。

但是在redis中進行實現鎖的網上百分之99的案例中,都如下 。

long i = jedis.setnx(key, key);  

if(i == 

1)  else

}  這個是這裡在setnx之後還沒來得及設定過期時間就宕機了,這樣會導致deadlock

正確的做法應該是:

string result = jedis.set(redislock, randomuuid, set_if_not_exist, set_with_expire_time, timeout);

127.0.0.1:7180> set key value [ex seconds] [px milliseconds] [nx|xx]

public

class

redistool

return

false

; }

}

解鎖的時候,有人會進行

jedis.del()  // 這種做法也是不可以的。

每乙個人都會進行刪除對應的鎖。

public

static

void

wrongreleaselock2(jedis jedis, string lockkey, string requestid)

}

正確做法如下:

public

class

redistool

return

false

; }

}

參考:

Redis分布式鎖的正確實現方式

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

Redis分布式鎖的正確實現方式

首先,set 加入了nx引數,可以保證如果已有key存在,則函式不會呼叫成功,也就是只有乙個客戶端能持有鎖,滿足互斥性。其次,由於我們對鎖設定了過期時間,即使鎖的持有者後續發生崩潰而沒有解鎖,鎖也會因為到了過期時間而自動解鎖 即key被刪除 不會發生死鎖。最後,因為我們將value賦值為reques...

Redis 分布式鎖的實現方式

分布式鎖一般有三種實現方式 資料庫樂觀鎖 基於redis的分布式鎖 基於zookeeper的分布式鎖 加鎖 public class redistool return false 可以看到,我們加鎖就一行 jedis.set string key,string value,string n stri...