現(xiàn)在有個學(xué)生搶課程報名的項目,有很多的選修課定時讓家長搶。為了防止搶超,使用了mysql事務(wù)。但多個項目同時開搶,幾千個并發(fā),mysql就直接掛掉了。
最近了解了一下redis消息隊列,如果使用redis消息隊列來處理,大家有沒有比較好的方案分享。
可以使用PHP+redis樂觀鎖
這個用消息隊列或者redis隊列 list 最不濟寫一個lua 的 判斷redis屬于個數(shù)也可以的,很多實現(xiàn)方案呢,這里推薦redis list 然后其他操作入隊列慢慢處理就可以了
@tanhongbin 我有疑問老哥,lua 是原子操作,但是在并發(fā)情況下,用戶A在執(zhí)行l(wèi)ua腳本的時候,用戶B此時也來執(zhí)行 lua 腳本,那這個時候他是阻塞的吧,單個腳本是原子性,但是多個進程操作單個腳本,是否是阻塞的?
隊列,鎖
用那種都行,最好是隊列,鎖還有進程關(guān)了沒釋放,只能等失效的問題,list最好了,搶課就是30節(jié)課,只能三個學(xué)生搶,list里面30個,rpop沒了就是沒了,做好失敗了還原庫存的問題即可