提前做2個動作:
1.先把3臺 redis key全部清空(為了不受debug干擾,必須先刪除鎖)
127.0.0.1:6379> flushdb
ok2.islock = redlock.trylock(1000530, 1000605*30, timeunit.milliseconds);
debug的斷點 斷在 redissonlock.trylockinnerasync(long leasetime, timeunit unit, long threadid, redisstrictcommand command)
rfuturetrylockinnerasync(long leasetime, timeunit unit, long threadid, redisstrictcommandcommand)
keys[1]:collections.singletonlist(getname()),為分布式鎖的key,即my_redlock
ar**[1]:internallockleasetime 為鎖的租約時間,即過期時間
ar**[2]:getlockname(threadid)(4218379f-849d-498f-8c28-56f3fce42f71:52)代表了redis連線id+執行緒id,
即uuid+threadid,組成鎖的獲取者,就是誰拿到了該鎖。
分布式鎖 紅鎖
單台redis支援 set key value nx px time value 必須唯一避免誤解鎖,設定與失效時間不能分割,刪除鎖判斷是否解鎖人就是加鎖人,鎖失效時間應自動延長有效期 1 獲取當前時間 2 向多個節點獲取鎖,獲取鎖有乙個極小的超時時間。獲取鎖失敗後,立即嘗試下乙個redis節點獲取...
Redis分布式鎖加鎖解鎖流程
可靠的分布式鎖要具備以下幾個特性 互斥性。在任意時刻,只有乙個客戶端能持有鎖 不會發生死鎖。即使有乙個客戶端在持有鎖的期間崩潰,而沒有主動解鎖,也能保證後續其他客戶端能加鎖。具有容錯性。只要大部分的redis節點正常執行。客戶端就能加鎖和解鎖。解鈴還須繫鈴人。加鎖和解鎖必須是同乙個客戶端,客戶端自己...
分布式鎖的鎖優化
在去除原有synchronized單機鎖後,在關鍵步驟新增分布式鎖來對具體業務進行鎖定,然而由於鎖定範圍大,導致鎖競爭增加,不斷發生鎖等待,如果不進行優化,可能會讓執行緒佇列增大甚至阻塞,而且在等待時長超過設定的閾值時,執行緒將超時返回。在此,初步對鎖進行優化,如何理解分布式鎖與單機鎖的應用範圍和實...