概述
2019独角兽企业重金招聘Python工程师标准>>>
做之前看了不少关于秒杀商品的文章,其中有一篇觉得很好:【问底】徐汉彬:Web系统大规模并发——电商秒杀与抢购
抢码的逻辑比秒杀商品要简单太多,虽然简单但是高并发的问题却还是存在的,有几个问题:
如何保证不超发。
如何防止重复领取。
如何防止用户领取到同一个码。
直接操作数据库的做法:
先查询status为0的纪录,再更新:select id from codes where status = 0 limit 1;update codes set status = 1 where id = xxx and status = 0;
上面的做法在高并发下会出现什么问题呢?
造成多个用户查询到同一个码。
update的时候会扫描全表。
开启事务时先select后update可能会造成死锁。
我的想法是加入Redis来提高高并发时的性能:
事先把码放入redis队列中
满足条件pop一个码出来
为什么使用redis队列?redis是单线程,这样队列出队实际会是串行的操作,可以避免超发和用户取到同一个码的问题,也解决了数据库压力。
总结:只是针对业务方面,实际运用的时候还会做一些负载均衡、限流、防刷的策略。如果并发太高向数据库添加记录的操作可以异步来进行。
转载于:https://my.oschina.net/zhanyu/blog/624644
最后
以上就是凶狠枫叶为你收集整理的限时抢码(秒杀)设计的全部内容,希望文章能够帮你解决限时抢码(秒杀)设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复