我寫的偽代碼如下,但出現(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
如何設(shè)計高并發(fā)下的抽獎?
胡子哥哥
2019-04-13 08:36:50