redis 快取設計 訊號量設計

2022-03-17 05:41:15 字數 2126 閱讀 1076

1.通過zset add 和rank來實現是否獲取訊號量的判斷,

2.add時通過當前時間+超時時間 計算的時間設定為score 每次add提前刪除過期的0~當前時間

public

static

class

redissemaphore

/*** 訊號量

* @param

timeout

* @return

*/public

boolean

acquire( jedis conn,integer timeout)

//執行緒快取儲存用於釋放

semaphorevalue.set(index);

return

true

; }

public

void

release( jedis conn)

conn.zrem("semaphore:acquire", index);

}}

public

static

void

main(string args)

throws

exception

}).start();

}countdownlatch.await();

//********************=不釋放***************====

system.out.println("***************===多執行緒不釋放獲取訊號量結果 下面正常獲取表示有上面有正常釋放***************===");

for(int i=0;i<12;i++)

}).start();

}}

***************===多執行緒獲取並釋放訊號量結果***************===獲取釋放,i8,

true

獲取釋放,i7,

true

獲取釋放,i1,

true

獲取釋放,i10,

true

獲取釋放,i3,

true

獲取釋放,i6,

true

獲取釋放,i0,

true

獲取釋放,i4,

true

獲取釋放,i2,

true

獲取釋放,i9,

true

獲取釋放,i5,

true

***************===多執行緒不釋放獲取訊號量結果 下面正常獲取表示有上面有正常釋放***************===獲取不釋放i1,

true

獲取不釋放i0,

true

獲取不釋放i2,

true

獲取不釋放i3,

true

獲取不釋放i4,

true

獲取不釋放i5,

true

獲取不釋放i8,

true

獲取不釋放i7,

true

獲取不釋放i6,

false

獲取不釋放i11,

true

獲取不釋放i10,

true

獲取不釋放i9,

true

集群情況下 各個伺服器時間可能不一致,可能導致不同伺服器先後獲取訊號量,後獲取的伺服器時間比先獲取的時間大,搶占了訊號量,通過維護乙個原子性的index在redis 通過index的set來獲取rank

/**

* 訊號量

* @param

timeout

* @return

*/public

boolean

acquire( jedis conn,integer timeout)

//執行緒快取儲存用於釋放

semaphorevalue.set(index);

return

true

; }

a incr 後得到5   b incr得到6   b先sadd  判斷rank 成功,這個時候a 又sadd  判斷rank成功導致訊號量比limit多 可以在外面加一層分布式鎖

利用條件訊號量設計讀寫鎖

1 乙個資源同時可以有多個讀寫,但是只能有乙個寫鎖 2 用flag代表鎖的狀態,define un lock 0 define r lock 1 上一把讀鎖加乙個r lock define w lock 1 偽 1 lock r pthread lock resource.mutex while r...

訊號量 二值訊號量

訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...

python訊號量 Python訊號量

python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...