鍍金池/ 問答/人工智能  PHP/ 如何實(shí)現(xiàn)影院購票操作,防止出現(xiàn)一票多買的現(xiàn)象?

如何實(shí)現(xiàn)影院購票操作,防止出現(xiàn)一票多買的現(xiàn)象?

近期有個(gè)項(xiàng)目是劇院票務(wù)管理系統(tǒng),但夠票模塊不知道該怎么實(shí)現(xiàn),起初采用MySQL數(shù)據(jù)庫的事務(wù)和加鎖機(jī)制,但還是會(huì)出現(xiàn)一些問題,最后想了想可不可以用Redis的消息隊(duì)列,但不知道具體如何去實(shí)現(xiàn),希望哪位大佬可以給一些思路或見解。萬分感謝。

回答
編輯回答
陪妳哭

12306是怎么實(shí)現(xiàn)的,每次買之前都去數(shù)據(jù)庫查一下,看看狀態(tài)對不對。狀態(tài)對了,就讓你買。不對就顯示被預(yù)定了

2018年9月17日 22:19
編輯回答
巫婆

用 redis 的 incr、decr、incrby 控制庫存的增減就好了,不用那么復(fù)雜。


簡單點(diǎn)說,生產(chǎn)庫存的時(shí)候,redis 中同步也生產(chǎn)了庫存,用戶購買請求過來只需加減 redis 中的庫存,redis 操作成功后再同步執(zhí)行 db 事務(wù),或者引入消息隊(duì)列異步執(zhí)行 db 事務(wù)。使用 redis 可以解決并發(fā)超賣的原因在于 redis 是單進(jìn)程單線程同步操作,理解這個(gè)你就可以隨意去設(shè)計(jì)了,秒殺操作也如此。

2017年12月9日 14:18
編輯回答
黑與白

行級鎖不就OK了

2017年12月12日 02:10