課程
/后端開發
/PHP
/PHP消息隊列實現及應用
第一步判斷隊列長度,第二步插入隊列。
那如果瞬時多個請求同時到達,是不是會有這一種情況出現:
第一步得到的值都是小于10的(因為還沒走到第二步),然后真正插入到隊列中的數據就會超過設定值?
2019-05-29
源自:PHP消息隊列實現及應用 3-2
正在回答
確實會有這樣的問題發生,解決方案有兩個:
1、提前將秒殺數據寫入到隊列中,比如你寫10個隨機數(token)進入隊列,然后有請求過來的時候,你開始pop這個token,并判斷得到的值是否為空,如果為空說明10個token已經被取完了,秒殺結束。因為pop是redis的原始操作,不用擔心重復返回相同值的問題。
2、在你的消費進程中設置為單線程處理,只處理10個記錄。
舉報
消息隊列是個什么玩意兒,使用隊列解決秒殺等實際問題概念和使用方法
2 回答一點疑問,求解答
2 回答秒殺回滾機制的一點疑慮
3 回答還有點問題沒明白
1 回答誰能提供一下 db.php 源碼?
3 回答想問一下,如何將linux目錄映射到本地呢?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2019-05-31
確實會有這樣的問題發生,解決方案有兩個:
1、提前將秒殺數據寫入到隊列中,比如你寫10個隨機數(token)進入隊列,然后有請求過來的時候,你開始pop這個token,并判斷得到的值是否為空,如果為空說明10個token已經被取完了,秒殺結束。因為pop是redis的原始操作,不用擔心重復返回相同值的問題。
2、在你的消費進程中設置為單線程處理,只處理10個記錄。