基於參考文章自己敲了一遍,基本一樣。
利用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...