Jedis分布式鎖實際應用筆記

2022-07-03 10:15:12 字數 2389 閱讀 1719

前幾日做了乙個類似論壇的功能實現,話不多說,上**

工具類 jedisutil

@component

public

class

jedisutil ")

public

void

setjedisclusterprefix(string jedisclusterprefix)

}@value("$")

private

void

initredishostinfo(string hosts)

/*** jedis初始化**

@since

2020-02-26

*/public

static

void

redispoolfactory()

/*** 獲取字串**

@since

202-02-26

*/public

static string getstring(string key, int

... second)

catch

(exception e)

finally

}/*** 寫入字串**

@since

2020-02-26

*/public

static

void setstring(string key, string data, int

... second)

catch

(exception e)

finally

}/*** 設定key的時間**

@since

2020-02-26

*/public

static

long expire(string key, integer second)

catch

(exception e)

finally

}/*** redis分布式鎖判定**

@since

2020-02-26

*/public

static object eval(string key, listkeys, listargs)

catch

(exception e)

finally

}/*** 延長key的時間**

@since

2020-02-26

*/private

static

void expireinside(jedis jedis, string key, int

... second)

}/*** 嘗試獲取分布式鎖**

@param

lockkey 鎖

* @param

requestid 請求標識

* @param

expiretime 超期時間

* @return

是否獲取成功

*/public

static

boolean trygetlock(string lockkey, string requestid, int

expiretime)

return

false

; }

catch

(exception e)

finally

}/*** 釋放分布式鎖**

@param

lockkey 鎖

* @param

requestid 請求標識

* @return

是否釋放成功

*/public

static

boolean

releaselock(string lockkey, string requestid)

else

} catch

(exception e)

finally

}}

實際**呼叫

//

uuid

string requestid =uuidutils.getuuid();

//分布式鎖

string topiclock = "topiclock_" +topicid;

boolean flag = true

;

if(條件)

thread.sleep(300l);

}}

這是在jedis基礎上自己封裝的分布式鎖,跟redistemplate分布式鎖一樣存在集群中鎖異常關閉導致重複獲取鎖的問題,簡單業務可以應用,如果業務龐大且伺服器不穩定,建議選擇zk做分布式鎖

jedis實現分布式鎖

1.互斥性。在任意時刻,只有乙個客戶端能持有鎖。2.不會發生死鎖。即使有乙個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證後續其他客戶端能加鎖。3.具有容錯性。只要大部分的redis節點正常執行,客戶端就可以加鎖和解鎖。4.解鈴還須繫鈴人。加鎖和解鎖必須是同乙個客戶端,客戶端自己不能把別人加的鎖給...

分布式 分布式鎖

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

分布式專題 分布式鎖

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