一點小疑惑
第一步判斷隊列長度,第二步插入隊列。
那如果瞬時多個請求同時到達(dá),是不是會有這一種情況出現(xiàn):
第一步得到的值都是小于10的(因為還沒走到第二步),然后真正插入到隊列中的數(shù)據(jù)就會超過設(shè)定值?
第一步判斷隊列長度,第二步插入隊列。
那如果瞬時多個請求同時到達(dá),是不是會有這一種情況出現(xiàn):
第一步得到的值都是小于10的(因為還沒走到第二步),然后真正插入到隊列中的數(shù)據(jù)就會超過設(shè)定值?
2019-05-29
舉報
2019-05-31
確實會有這樣的問題發(fā)生,解決方案有兩個:
1、提前將秒殺數(shù)據(jù)寫入到隊列中,比如你寫10個隨機數(shù)(token)進(jìn)入隊列,然后有請求過來的時候,你開始pop這個token,并判斷得到的值是否為空,如果為空說明10個token已經(jīng)被取完了,秒殺結(jié)束。因為pop是redis的原始操作,不用擔(dān)心重復(fù)返回相同值的問題。
2、在你的消費進(jìn)程中設(shè)置為單線程處理,只處理10個記錄。