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

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

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

回答
編輯回答
陪妳哭

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

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

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


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

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

行級(jí)鎖不就OK了

2017年12月12日 02:10