最贊回答 / 尋找09之夏
視頻中采用for循環(huán)測試,這個是有序的,所以不會出現(xiàn)超賣現(xiàn)象;如果并發(fā)測試的話,會出現(xiàn)超賣現(xiàn)象;這里提供一個解決思路:活動前定義一個長度為10的list;利用lpop的原子性可以保障不會超賣;就是每次請求先lpop,如果可以獲取到值,表示秒殺成功;獲取不到說明已搶完。
2019-09-21
最新回答 / IT行業(yè)小菜鳥
采用異步的原因是根據(jù)實際的業(yè)務(wù)邏輯,用戶只關(guān)心是否搶購成功的結(jié)果,并不需要詳細(xì)數(shù)據(jù),所以只返回給用戶成功或失敗的提示,實際隊列中的搶購數(shù)據(jù)一般是通過定時任務(wù)由消費(fèi)者進(jìn)行消費(fèi),定時任務(wù)可以是系統(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
最新回答 / 侏儒冰法
以課程案例為例,前10個秒殺成功,這個結(jié)果是實時的,可以直接返給前端。實際項目時,也是在得到秒殺成功的標(biāo)識之后,才進(jìn)行后續(xù)的付款操作。
2019-06-25
最贊回答 / 慕粉0112974
確實會有這樣的問題發(fā)生,解決方案有兩個:1、提前將秒殺數(shù)據(jù)寫入到隊列中,比如你寫10個隨機(jī)數(shù)(token)進(jìn)入隊列,然后有請求過來的時候,你開始pop這個token,并判斷得到的值是否為空,如果為空說明10個token已經(jīng)被取完了,秒殺結(jié)束。因為pop是redis的原始操作,不用擔(dān)心重復(fù)返回相同值的問題。2、在你的消費(fèi)進(jìn)程中設(shè)置為單線程處理,只處理10個記錄。
2019-05-29