国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

秒殺搶購報名有沒有什么好的方案

liqianmo

多SKU搶購

現(xiàn)在有個學(xué)生搶課程報名的項目,有很多的選修課定時讓家長搶。為了防止搶超,使用了mysql事務(wù)。但多個項目同時開搶,幾千個并發(fā),mysql就直接掛掉了。

最近了解了一下redis消息隊列,如果使用redis消息隊列來處理,大家有沒有比較好的方案分享。

1969 7 1
7個回答

zpw

可以使用PHP+redis樂觀鎖

  • 查表仔 2023-02-22

    在不加鎖的情況下,貌似 Redis 的 list、set 的 sPop 都能實現(xiàn)吧,原子性操作,獲取到就是還有庫存,獲取不到就是沒有庫存

  • liqianmo 2023-02-22

    這個對數(shù)據(jù)庫的壓力貌似還是很大。主要是不是怕賣超過,主要是mysql的瓶頸在哪里。

  • 小W 2023-02-22

    你這是兩個問題,一是超賣,二是mysql自身瓶頸,超賣問題可以通過redis解決,mysql瓶頸可以通過隊列優(yōu)化

  • zpw 2023-12-06

    Redis 的 list、set 的 sPop 是原子操作 但是 是的單線程執(zhí)行

a784910468

sql直接丟隊列,結(jié)果先存redis

小W

redis+lua

  • 小W 2023-02-22

    在lua中執(zhí)行查詢和減庫存操作

  • liqianmo 2023-02-22

    mysql端口的庫存怎么操作。

  • 小W 2023-02-22

    最大限度減小同步時間就行

tanhongbin

這個用消息隊列或者redis隊列 list 最不濟寫一個lua 的 判斷redis屬于個數(shù)也可以的,很多實現(xiàn)方案呢,這里推薦redis list 然后其他操作入隊列慢慢處理就可以了

  • 查表仔 2023-02-22

    lua的話是用純腳本,還是用 php-redis 里的 lua?

  • liqianmo 2023-02-22

    目前思路應(yīng)該大致就是先把庫存緩存到redis,然后操作redis減庫存,用戶的下單請求放入隊列,然后慢慢的消費下單。

  • tanhongbin 2023-02-22

    @查表仔 哪個都行,最后都是lua 操作redis

  • 查表仔 2023-02-22

    @tanhongbin 我有疑問老哥,lua 是原子操作,但是在并發(fā)情況下,用戶A在執(zhí)行l(wèi)ua腳本的時候,用戶B此時也來執(zhí)行 lua 腳本,那這個時候他是阻塞的吧,單個腳本是原子性,但是多個進程操作單個腳本,是否是阻塞的?

  • tanhongbin 2023-02-22

    阻塞的,redis是單線程的,就是lua你必須執(zhí)行完了,下一個才會執(zhí)行

查表仔

截圖

chatgpt的答案

  • liqianmo 2023-02-22

    面向chatgpt編程

  • 小W 2023-02-22

    開通一個chagpt的接口,可以在提問題的時候,自動回復(fù)答案,[哈哈]

guanhui07

隊列,鎖

  • tanhongbin 2023-02-22

    用那種都行,最好是隊列,鎖還有進程關(guān)了沒釋放,只能等失效的問題,list最好了,搶課就是30節(jié)課,只能三個學(xué)生搶,list里面30個,rpop沒了就是沒了,做好失敗了還原庫存的問題即可

luohonen

用一個簡單隊列就能搞定的事情,說那么多其他更復(fù)雜的干什么

  • 小W 2023-02-22

    其實跟那個自動收貨的問題,一個答案 O(∩_∩)O

年代過于久遠,無法發(fā)表回答
??