最贊回答 / 尋找09之夏
視頻中采用for循環(huán)測試,這個是有序的,所以不會出現(xiàn)超賣現(xiàn)象;如果并發(fā)測試的話,會出現(xiàn)超賣現(xiàn)象;這里提供一個解決思路:活動前定義一個長度為10的list;利用lpop的原子性可以保障不會超賣;就是每次請求先lpop,如果可以獲取到值,表示秒殺成功;獲取不到說明已搶完。
2019-09-21
最新回答 / IT行業(yè)小菜鳥
采用異步的原因是根據(jù)實際的業(yè)務邏輯,用戶只關心是否搶購成功的結果,并不需要詳細數(shù)據(jù),所以只返回給用戶成功或失敗的提示,實際隊列中的搶購數(shù)據(jù)一般是通過定時任務由消費者進行消費,定時任務可以是系統(tǒng)級別的crontab,也可以是php的定時器等
2019-09-01
最新回答 / 尋找09之夏
視頻中采用for循環(huán)測試,這個是有序的,所以不會出現(xiàn)超賣現(xiàn)象;如果并發(fā)測試的話,會出現(xiàn)超賣現(xiàn)象;這里提供一個解決思路:活動前定義一個長度為10的list;利用lpop的原子性可以保障不會超賣;就是每次請求先lpop,如果可以獲取到值,表示秒殺成功;獲取不到說明已搶完。
2019-08-06
大致說一下吧,為了防止超賣現(xiàn)象,這個應該改良一下。
也就是說比如說你是限購100個貨物,那就先建一個包含100個數(shù)據(jù)的隊列,然后搶購的時候用lpop排出該隊列里面的元素,如果排出成果,就降這個用戶的id之類的信息插入另一個隊列,如果排出失敗,直接返回搶購失敗一類的,大致上應該是這樣,也就是說用2個隊列來實現(xiàn)秒殺系統(tǒng),防止超賣。
也就是說比如說你是限購100個貨物,那就先建一個包含100個數(shù)據(jù)的隊列,然后搶購的時候用lpop排出該隊列里面的元素,如果排出成果,就降這個用戶的id之類的信息插入另一個隊列,如果排出失敗,直接返回搶購失敗一類的,大致上應該是這樣,也就是說用2個隊列來實現(xiàn)秒殺系統(tǒng),防止超賣。
2019-06-10
最贊回答 / 慕粉0112974
確實會有這樣的問題發(fā)生,解決方案有兩個:1、提前將秒殺數(shù)據(jù)寫入到隊列中,比如你寫10個隨機數(shù)(token)進入隊列,然后有請求過來的時候,你開始pop這個token,并判斷得到的值是否為空,如果為空說明10個token已經(jīng)被取完了,秒殺結束。因為pop是redis的原始操作,不用擔心重復返回相同值的問題。2、在你的消費進程中設置為單線程處理,只處理10個記錄。
2019-05-29
課程所需庫文件:http://pan.baidu.com/s/1bQg038 老師這個鏈接已經(jīng)失效,請問能否再分享一次,順便源碼也分享下!
2019-05-08
【Intance】是個什么鬼?視頻中念了十幾遍,居然還沒有發(fā)現(xiàn)錯誤,看來P主記憶中這個單詞就是這么拼的。正確=【Instance】
2019-04-30