我是靠谱客的博主 凶狠枫叶,最近开发中收集的这篇文章主要介绍限时抢码(秒杀)设计,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

做之前看了不少关于秒杀商品的文章,其中有一篇觉得很好:【问底】徐汉彬: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来提高高并发时的性能:

101237_yNxz_102055.jpg


  • 事先把码放入redis队列中

  • 满足条件pop一个码出来

为什么使用redis队列?redis是单线程,这样队列出队实际会是串行的操作,可以避免超发和用户取到同一个码的问题,也解决了数据库压力。

总结:只是针对业务方面,实际运用的时候还会做一些负载均衡、限流、防刷的策略。如果并发太高向数据库添加记录的操作可以异步来进行。



转载于:https://my.oschina.net/zhanyu/blog/624644

最后

以上就是凶狠枫叶为你收集整理的限时抢码(秒杀)设计的全部内容,希望文章能够帮你解决限时抢码(秒杀)设计所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部