Rumah > pembangunan bahagian belakang > tutorial php > 怎么在代码层处理app客户端同个人同时并发多个请求?

怎么在代码层处理app客户端同个人同时并发多个请求?

WBOY
Lepaskan: 2016-06-06 20:20:27
asal
1386 orang telah melayarinya

怎么在代码层处理app客户端同个人同时并发多个请求?

有个分享统计的接口,有时候客户端同个人会并发多个请求过来,服务端做了集群,最先通过redis 做一个cache(uid+articleid)判断是否有,结果直接绕过.

有没有什么办法直接在代码逻辑里面判断到,然后直接返回,而不是要到mysql那里通过唯一索引什么的来解决.

谢谢~~~

回复内容:

怎么在代码层处理app客户端同个人同时并发多个请求?

有个分享统计的接口,有时候客户端同个人会并发多个请求过来,服务端做了集群,最先通过redis 做一个cache(uid+articleid)判断是否有,结果直接绕过.

有没有什么办法直接在代码逻辑里面判断到,然后直接返回,而不是要到mysql那里通过唯一索引什么的来解决.

谢谢~~~

记录这个人访问时间间隔,如果频率超出限定值,直接返回错误代码~~

同个人的请求也可以通过redis控制请求频率啊。redis中key:uid+operation 通过increment(原子操作) 拿锁限制。

你的需求是并发安全方面的,就是如果同时多个请求,每个请求都涉及到查询,判断,更新这样的三个步骤,由于多个线程同时进行前两部操作,而导致判断被绕过。
解决办法:
1.redis的watch,将查询到更新这三个步骤绑定到一起,其实直接使用redis的事务应该就可以了,无需使用watch,具体请实际测试
2.利用redis设计一个分布式锁,可参考官方给出的方案:http://www.oschina.net/translate/redis-distlock

3.利用队列,将同一个用户的请求放入同一个队列,依次进行处理

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan