最贊回答 / 尋找09之夏
視頻中采用for循環測試,這個是有序的,所以不會出現超賣現象;如果并發測試的話,會出現超賣現象;這里提供一個解決思路:活動前定義一個長度為10的list;利用lpop的原子性可以保障不會超賣;就是每次請求先lpop,如果可以獲取到值,表示秒殺成功;獲取不到說明已搶完。
2019-09-21
最新回答 / IT行業小菜鳥
采用異步的原因是根據實際的業務邏輯,用戶只關心是否搶購成功的結果,并不需要詳細數據,所以只返回給用戶成功或失敗的提示,實際隊列中的搶購數據一般是通過定時任務由消費者進行消費,定時任務可以是系統級別的crontab,也可以是php的定時器等
2019-09-01
最新回答 / 尋找09之夏
視頻中采用for循環測試,這個是有序的,所以不會出現超賣現象;如果并發測試的話,會出現超賣現象;這里提供一個解決思路:活動前定義一個長度為10的list;利用lpop的原子性可以保障不會超賣;就是每次請求先lpop,如果可以獲取到值,表示秒殺成功;獲取不到說明已搶完。
2019-08-06
最贊回答 / 慕粉0112974
確實會有這樣的問題發生,解決方案有兩個:1、提前將秒殺數據寫入到隊列中,比如你寫10個隨機數(token)進入隊列,然后有請求過來的時候,你開始pop這個token,并判斷得到的值是否為空,如果為空說明10個token已經被取完了,秒殺結束。因為pop是redis的原始操作,不用擔心重復返回相同值的問題。2、在你的消費進程中設置為單線程處理,只處理10個記錄。
2019-05-29