分布式鎖總結(一)

2021-09-16 20:30:41 字數 970 閱讀 3489

在某次某街面試中,面試官問:能否使用redis incr命令是否可以實現分布式鎖?

正確的使用方式

incr 方法會導致什麼問題?

當你template.opsforvalue(),increment(key,1);這個key就存在了,如果忽然redis宕機,那麼這個key一直存在。

為啥說我上面鏈結是正確解法?

經過本人思考,道理都是同乙個,就是如果redis宕機,你這個key是存在的,其他客戶端是獲取不到的,那麼會導致死鎖。

使用redis set()含時間引數的也一樣,為了可以在特定時間內,讓鎖失效.

string result=jedis.set(lockkey, requestid, set_if_not_exist, set_with_expire_time, expiretime);

如果incr方法後不是為1,則讓key 2秒失效

redistemplate.expire(key, 2, timeunit.seconds);
這種方法還是不推薦,看下別人的**分析一下

@autowired

private redistemplate redistemplate;

/*** 加鎖

*/public boolean getlock(string key) else

}//如果存在表示重複

return false;

} catch (exception e)

}

如果在redistemplate.expire(key, 2, timeunit.seconds);這裡redis宕機了,key失效不了的。還是會導致死鎖

沒有jedis.set(lockkey, requestid, set_if_not_exist, set_with_expire_time, expiretime);這種好,因為它設定的時候就已經把key以及過期時間設定進去了。

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

分布式專題 分布式鎖

在傳統的單體應用架構中,遇到併發安全性問題時我們可以通過同步鎖synchronized,同步 塊,reentrantlock等方式都可以解決,但隨著業務的發展,單體應用架構不能滿足龐大的使用者請求量,於是分布式系統應用而生,在分布式系統中,由於每個系統都執行在不同的伺服器上,有著不同的jvm,所以j...

Redis分布式鎖(一)

每個方案都有各自的優缺點,例如mysql雖然直觀理解容易,但是實現起來卻需要額外考慮鎖超時 加事務等,並且效能侷限於資料庫,諸如此類我們在此不作討論,重點關注redis。使用redis作為分布式鎖的優點 對於redis實現簡單,效能對比zookeeper和mysql較好。如果不需要特別複雜的要求,那...