Heim > Backend-Entwicklung > PHP-Tutorial > 关于MySQL并发查询的问题

关于MySQL并发查询的问题

WBOY
Freigeben: 2016-06-06 20:09:13
Original
1264 Leute haben es durchsucht

比如有一个逻辑,判断一个活动总支付人数,每满1000人就随机送礼包,查询支付总人数:

<code>select count(*) as total from payrecord where act_id='act'</code>
Nach dem Login kopieren
Nach dem Login kopieren

因为没有redis,其实我很想用redis计数,但是没有,假如同时5个人支付,假设第999人,和第1000,第1001人同时支付的,这个时候会不会都是返回1001的情况,这样就没有触发发礼品的逻辑。

对这种并发查询一个结果,特别是数量的情况,假设没有redis,还有什么办法可以保证可靠性?

回复内容:

比如有一个逻辑,判断一个活动总支付人数,每满1000人就随机送礼包,查询支付总人数:

<code>select count(*) as total from payrecord where act_id='act'</code>
Nach dem Login kopieren
Nach dem Login kopieren

因为没有redis,其实我很想用redis计数,但是没有,假如同时5个人支付,假设第999人,和第1000,第1001人同时支付的,这个时候会不会都是返回1001的情况,这样就没有触发发礼品的逻辑。

对这种并发查询一个结果,特别是数量的情况,假设没有redis,还有什么办法可以保证可靠性?

可以存一个锁(锁存在哪里并不重要),在第1000人的时候上锁,逻辑上先判断是否已经被锁,再去count.

简单的方法是每在随机送礼包前判断是否有发送记录,有的话,则跳过去(这一块的并发应该不受影响),方法和楼上的差不多。

加上where不就行了吗?

<code>protected function _afterPayment($order) {
    select count(*) from order where status = 'paid' and paid_time addOrderItem($order.id, $礼包_id);
    }
}</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage