分布式鎖的不同使用方式

2021-07-30 05:09:28 字數 1399 閱讀 8554

lock lock = lockholder.createlock(bizcode, lockkey, timeoutmsecs, expiremsecs);//(業務編號,鎖定key,獲取鎖超時,鎖超時)

-------------------------------1

lock.lock()

/**

* 注意:此方法為在超時範圍內阻塞式獲取鎖,如果超時仍然沒有獲得鎖,將不中斷,繼續進行後續操作

*/

tryfinally

-------------------------------2

lock.lockinterruptibly()

/**

* 注意:此方法為在超時範圍內阻塞式獲取鎖,如果超時仍然沒有獲得鎖,將中斷不執行後續操作

*/

tryfinally

-------------------------------3

booleantrylock()

/**

* 注意:此方法為非阻塞式獲取鎖

*/

try

}finally

-------------------------------4

booleantrylock(longtime, timeunit unit)

/**

* 注意:此方法為在給定時間範圍內的非阻塞式獲取鎖(給定時間為阻塞時間)

*/

try

}finally

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

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

分布式鎖實現方式

1 資料庫的唯一索引實現 獲得鎖時向表中插入一條記錄,釋放鎖時刪除這條記錄。唯一索引可以保證該記錄只被插入一次,那麼就可以用這個記錄是否存在來判斷是否存於鎖定狀態。缺點 2 redis的setnx指令實現 使用 setnx set if not exist 指令插入乙個鍵值對,如果 key 已經存在...

分布式 分布式鎖

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