基於Redis的分布式鎖實現

2021-08-20 10:08:45 字數 1194 閱讀 3927

本節基於redis簡單實現了分布式鎖

/**

* 加鎖

*@param

key*

@param

value

*@param

expire

*@return

*/public boolean

lock(string key, string value, int expire)catch (exception e)finally

return false;

}

key:每次加鎖時生成的全域性唯一鍵

nx:僅在鍵不存在的情況才能設定成功

px:表示以毫秒為單位的過期時間

/**

* 解鎖

*@param

key*

@param

value

*@return

*/public boolean

unlock(string key, string value)catch (exception e)finally

return false;

}

如果乙個執行緒獲取鎖之後,由於某些原因阻塞了並且超過了過期時間,等到這個執行緒恢復的時候就有可能誤刪別的執行緒的鎖。因此在釋放鎖的時候需要先查詢key是否是期望的值,然後再刪除該鍵。為了保證兩個操作的原子性,可以在lua中實現。

ifredis

.call

("get"

,keys

[1]) == argv

[1]thenreturnredis

.call

("del"

,keys

[1])

elsereturn0

end

基於Redis實現分布式鎖

分布式鎖的基本功能 1.同一時刻只能存在乙個鎖 2.需要解決意外死鎖問題,也就是鎖能超時自動釋放 3.支援主動釋放鎖 分布式鎖解決什麼問題 多程序併發執行任務時,需要保證任務的有序性或者唯一性 準備 redis版本 2.6 redis是主從 sentinel模式 為了高可用 原理 redis2.6之...

基於Redis實現分布式鎖

之前專案中使用redis鎖實現秒殺等一些併發業務,在這裡整理一下基於redis實現分布式鎖的簡單入門例項,記錄一下,便於以後檢視 學習。springboot整合redisson分布式鎖 1 簡介 在分布式系統中存在併發場景,為了解決這一問題,基於redis鎖一定程度可以解決這一問題,但是也有缺點,如...

基於redis實現分布式鎖

實現方式 具備條件 確保鎖可用,必須要滿足一下幾個條件 1 互斥性,任意時刻只有乙個使用者能持有鎖 2 不會產生死鎖,假設某個使用者在持有鎖的期間由於服務崩潰或者其他原因沒有主動釋放鎖,也能保證後續其他使用者可以加鎖 3 加鎖和解鎖必須是同一使用者,b使用者無法解除a使用者加的鎖 實現 1 引入je...