第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何設(shè)計高并發(fā)下的抽獎?

如何設(shè)計高并發(fā)下的抽獎?

胡子哥哥 2019-04-13 08:36:50
我寫的偽代碼如下,但出現(xiàn)了個bug,抽獎現(xiàn)在要限制每日抽獎結(jié)果出現(xiàn)的次數(shù),但實際運(yùn)行是在并發(fā)時不能限制住,如何解決?resultDayLimitTimes={resultA=>2#每天最多出現(xiàn)2次resultB=>5#每天最多出現(xiàn)5次resultC=>20#每天最多出現(xiàn)20次resultD=>Infinite#每天出現(xiàn)次數(shù)沒有限制}Begintransactionselect*fromlottery_chancewhereid=XXandresult=nulllimit1forupdate#bug就在下面這個循環(huán)里,如果resultA今天已經(jīng)出現(xiàn)過一次了,#然后有2個人(這2人的XX是不同的,所以前面的forupdate對#于這種并發(fā)不能限制,前面的forupdate是用來防止同一次抽獎機(jī)會被并發(fā)時使用多次的)#同時抽到Y(jié)Y=resultA,由于事務(wù)還未提#交那么yyCount都是1,小于每日限制2,于是跳出循環(huán),這2人#都中了resultA,這時當(dāng)天出現(xiàn)了3個resultA超出2個限制,#我應(yīng)該怎么寫才能解決這個問題?whiletrue{YY=randomIn[resultA,resultB,resultC,resultD]yyCount=selectcount(*)fromlottery_chancewhereresult=YYandused_time>todayDateifyyCount
查看完整描述

2 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗 獲得超6個贊

高并發(fā)下抽獎跟秒殺系統(tǒng)有些類似。
比如,中獎只是少數(shù),大部分人并不會中獎。所以可以在第一步便限制只有少數(shù)用戶的請求能夠打到真正抽獎邏輯上。這樣一來服務(wù)器壓力就小了很多。
真正參與抽獎的用戶,先隨機(jī)下該用戶能不能中獎,中什么獎,如果是中了,再去查詢有沒有該獎(若沒有獎則顯示未中)。這樣,又減少了一些對數(shù)據(jù)庫的請求。
這樣,高并發(fā)也只限于http服務(wù)器,對數(shù)據(jù)庫的壓力不是很大。
                            
查看完整回答
反對 回復(fù) 2019-04-13
  • 2 回答
  • 0 關(guān)注
  • 358 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號