亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

第一次從DB中獲取SecKill時,并發如何處理

按老師視頻的方案,若多個線程并發訪問,當redis中沒有數據時,都會去請求數據庫,然后同時往redis中寫入相同key的值,請問怎么解?

正在回答

2 回答

這個問題挺好的,確實會出現多線程并發問題,可能會出現同時往redis中寫入相同key的值,但是對結果沒有影響吧,也可以解決:就是在redis中不存在要去訪問數據庫的時候加上鎖。

0 回復 有任何疑惑可以回復我~

使用互斥鎖(mutex key) ;簡單點講就是類似“鎖”的機制,在緩存更新或者過期的情況下,先獲取鎖,在進行更新或者從數據庫中獲取數據后,再釋放鎖,需要一定的時間等待,就可以從緩存中繼續獲取數據

String get(String key){ ? ?String value = redis.get(key); ? ?if(value == null){ ? ? ? ?if(redis.setnx(key_Mutex),"1"){ ? ? ? ? ? ?redis.expire(key_mutex,3*60);//防止死鎖 ? ? ? ? ? ?value = db.get(key); ? ? ? ? ? ?redis.set(key,value); ? ? ? ? ? ?resdis.delete(key_Mutex); ? ? ? ?}else{ ? ? ? ? ? ?Thread.sleep(50); ? ? ? ? ? ?get(key); ? ? ? ?} ? ?} }

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

第一次從DB中獲取SecKill時,并發如何處理

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號