redis分布式鎖 樂觀鎖實現

2021-10-04 05:23:06 字數 1724 閱讀 5065

基於參考文章自己敲了一遍,基本一樣。

利用springboot搭建環境,基於redis實現樂觀鎖秒殺

配置檔案

#redis

spring.redis.host=127.0.0.1

spring.redis.port=6379

spring.redis.timeout=10000

配置類

@component

@configurationproperties

(prefix=

"spring.redis"

)@data

public

class

redisconfig

}

@configuration

public

class

redisutil

public

void

show()

public

static

void

returntopool

(jedis jedis)

}}

實現類:

@springboottest

class

optimisticlocktest

public

void

show()

//初始化庫存

public

void

initproduct()

if(jedis.

exists

(key)

) jedis.

set(key,string.

valueof

(productnum));

redisutil.

returntopool

(jedis);}

//初始化客戶端並開始搶商品

public

void

initclient()

threadpool.

shutdown()

;while

(true

)try

catch

(exception e)}}

//輸出結果

public

void

printresult()

redisutil.

returntopool

(jedis);}

//顧客執行緒,設定成內部類是為了在這裡也能用到jedispool

class

clientthread

implements

runnable

@override

public

void

run(

)catch

(interruptedexception e)

system.out.

println

(clientname +

"開始搶購商品");

jedis = jedispool.

getresource()

;if(jedis == null)

tryelse

}else

}catch

(exception e)

finally}}

}}

Redis分布式鎖 樂觀鎖的實現

樂觀鎖 大多數是基於資料版本 version 的記錄機制實現的。即為資料增加乙個版本標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表增加乙個 version 欄位來實現讀取出資料時,將此版本號一同讀出,之後更新時,對此版本號加1。此時,將提交資料的版本號與資料庫表對應記錄的當前版本號進行比...

樂觀鎖實現分布式鎖

就是說特別樂觀,比如說每次去吃飯的時候,都認為視窗沒有人,只有到了吃飯的視窗才看有沒有人,如果有人則去別的地方吃飯。就像系統認為資料的更新在大多數情況下是不會產生衝突的,只在資料庫更新操作的提交的時候才對資料作衝突檢測。如果檢測的結果出現了與預期資料不一致的情況,則返回失敗的資訊。樂觀鎖在大多數是基...

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

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