java吧 关注:1,271,058贴子:12,777,757
  • 37回复贴,共1

java设计限时秒杀活动(个人想法,欢迎大佬讨论)

只看楼主收藏回复

服务器集群就不说了,配几台redis,然后加一个redis集群,主从复制,假设一共有200件商品,下午一点开抢,限时10分钟,我的思路是在redis里面设置一个key,此key(A)为200,当一点到一点十分有请求进入的话,获取请求的用户ID并将此ID插入加上此次活动的命名规则存入redis,然后将A-1,直至A为0,然后拒绝所有请求,时间过期也拒绝所有请求,综上所述,方法大概是这样:首先获取key-A,假如A大于0,那么就去取此用户的ID,并加上此次活动的命名规则存入redis,并且A-1,然后返回抢购成功,else,返回商品已抢完。大概思路就是这样,时间控制在前台实现!
这只是一个菜鸟的构想,不足之处欢迎大佬来指正·······


1楼2018-05-07 10:10回复
    ······················


    2楼2018-05-07 10:19
    回复(2)
      2025-07-25 17:02:00
      广告
      不感兴趣
      开通SVIP免广告
      顶顶顶


      3楼2018-05-07 10:34
      回复
        秒杀活动,基本在一分钟甚至十几秒内完成,如何如此短的时间内接收几百上千万条请求,再判断哪位用户抢到了才是需要解决的吧,


        IP属地:四川来自Android客户端4楼2018-05-07 10:56
        收起回复
          mq收人头数,比如在200人里挑5个,当mq达到200后其他的人给他抱歉人数已满


          来自Android客户端5楼2018-05-07 10:58
          收起回复
            直接用list结构就可以啦


            IP属地:广东来自iPhone客户端6楼2018-05-07 12:02
            收起回复
              上面都回答的啥?取前100?怎么取?效率呢?如果有人放弃呢?
              第一 购买接口加个拦截器 用于做时间校验,在你所设定的时间内将请求放进来,否则返回已结束 or 尚未开始 (也可以加上通过redis查询库存)
              第二 redis锁 setnx 所有人都只说取前X个 当到了边界值时候如何做到不超卖自然是分布式锁?在锁里面去做库存的增减,(如果用户抢到了之后又取消掉放弃秒杀名额这里需要对库存新增)。如果拦截器没有去校验库存应当再获取锁之前判断库存,避免过多的线程等待无意义的浪费用户时间。
              第三 等待的线程需要有队列,依次按照顺序获取锁,避免插队情况出现。


              IP属地:广东9楼2018-09-18 16:48
              回复(6)
                秒杀无外乎从限流 削峰 异步处理 内存缓存这几个方面入手...着重点应该在内存缓存上 或者异步处理


                10楼2018-09-18 17:07
                收起回复
                  2025-07-25 16:56:00
                  广告
                  不感兴趣
                  开通SVIP免广告
                  防作弊
                  1.同一个账号,一次性发出多个请求部分用户通过浏览器的插件或者其他工具,在秒杀开始的时间里,以自己的账号,一次发送上百甚至更多的请求。实际上,这样的用户破坏了秒杀和抢购的公平性。
                  应对方案:1.同一账号请求记录时间戳标记位。(可以在redis里根据用户ID 记录一条数据,比如1秒后失效)
                  2.再次请求的时候判断标记位是否存在,如果存在就立即打回请求。
                  2.多个账号,一次性发送多个请求例如微博中有转发抽奖的活动,如果我们使用几万个“僵尸号”去混进去转发,这样就可以大大提升我们中奖的概率。如果发现某个IP请求频率很高
                  应对方案:1.返回验证码,区分真实用户
                  3. 多个账号,不同IP发送不同请求黑客操作多个肉鸡应对方案:
                  活动开始前通过一些“数据挖掘”筛选过滤僵尸号,僵尸账号也还是有一些共同特征的,例如账号很可能属于同一个号码段甚至是连号的,活跃度不高,等级低,资料不全等等。根据这些特点,适当设置参与门槛,例如限制参与秒杀的账号等级。


                  11楼2018-09-18 17:15
                  收起回复