秒杀系统设计

有一个秒杀商品,只有10件,10万人来秒 怎么弄

阅读 22.9k
6 个回答

我觉得这里有三个问题,1.公平,2.商品卖光,3.缓解系统压力。
公平如何保证:

  • 先到先得:先来的自然要让他们进来(秒杀开始前的一律挡掉),10个商品的秒杀,秒杀开始后先来的100(经验值)个挨个进入mq,之后的挡住。然后对100挨个返回交易界面,填写信息确认。
  • 防止机器人:返回的交易界面,自然要填写验证码。

商品卖光:

  • 刚才说的100个,是10个商品的10倍,保证这些用户能够消费这10个商品。(当然可以利用历史数据做优化)

缓解系统压力:

  • 保证前两个的前提下。当然你可以直接放1w个用户进来,但没必要。
  • 只有100个用户了,对数据库的压力也就小了。用户收到交易页面后,手快的,先得。在处理他们交易的时候当然是要加锁的。 我觉得加锁有两个方法,一个是对总量n加锁,交易的时候其他用户不能改,交易完减1,另一个是对于10个变量分别加锁,这样会快一点。

自己的一点想法~~

Redis,你的不二选择。

唯一的问题是,你是按照付款成功减数量,还是按下秒杀就减数量。如果是按照付款成功,稍稍麻烦,你要锁定,还有解锁。

1.获取总数,存在数据库 2.有人拍下,获取当前已有多多少人拍下的总数 3.比较小于总数,可以拍,否则不让拍 4.减数量

先考虑各种方法降低你的数据库负载。

然后再考虑秒杀的公平性。

所以嘛,比如,你可以根据请求的时间戳做个规则,把 99% 甚至更多的请求直接扼杀在摇篮之中。

剩下的 1% 或者更少的请求再考虑按照公平的方法去竞争那为数不多的名额。

redis 啊,mq 啊,MySQL 事务啊,反正流量下来的,用啥都行。

新手上路,请多包涵

请问有人会做秒杀软件么

层层过滤,前置redis nosql数据库,中间队列,后面mysql

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏