美文网首页
关于抢购,秒杀的技术细节

关于抢购,秒杀的技术细节

作者: 胖虎大哥 | 来源:发表于2017-04-01 15:07 被阅读0次

版权声明:本文为博主原创文章,未经博主允许不得转载。

以下均为出现在抢购、秒杀的常经理

1、token的作用

token的用法为,用户渲染商品抢购页面时,服务端做一个加密处理,可以考虑为用MD5(户ID + 商品ID + 任意数字(例如用户生日)) .

这个做法的关键是,防批量刷新商品。

例如:

A、一个用户在登录态下,刷所有抢购商品接口。

B、一个用户不同的切换账号,来刷所有抢购商品接口。(如果登录有验证码,此步可以忽略)

2、关于减库存的导致超卖的问题

减库存的操作是比较复杂的,主要利用MySQLinnor db 的update的写锁机制。

update status = 1 where ItemId = xxx  and status = 0 limit 1;

并发数的考虑为库存*10,可以用nginx限流。(mysql连接池限流的话,服务端压力会过大,因此建议在上层反向代理限流)

分一下两种情况

A:当抢购商品为1件时

10个用户并发,只有一个用户能在执行这条sql上返回1,其他均为0。因此,返回1 的那个用户为抢购成功的用户,可以继续向下走流程。其他用户返回抢购失败。

B:当抢购商品大于1件时

为了防止多个线程去更新1条数据,行级锁导致大量线程争抢,就是 update num = num -1 这种。

因此,需要把这个商品拆成 N条数据,每条数据的抢购数都为1。(在抢购前,这些数据要提前添加好,等抢购开始时只做状态变更)

第一步,先查出主键(随机返回主键),

a1方法:select 主键 from table_name whereItemId = xxx  and status = 0ORDER BY RAND() limit 1;

a2方法:如果你用 ORDER BY RAND() 来随机读取记录的话,当数据表记录达到30万或者更多的时候,mysql将非常吃力. 那么用这种方案:取出所有主键,代码中ramdom随机取出一个。

第二部,update status = 1 where 主键 = xxx  and status = 0。

这样,多个线程争抢与库存值相等的数据 的情况下,就会减少等待时间。

相关文章

  • 关于抢购,秒杀的技术细节

    版权声明:本文为博主原创文章,未经博主允许不得转载。 以下均为出现在抢购、秒杀的常经理 1、token的作用 to...

  • redis实现秒杀抢购

    秒杀订单提前写入 秒杀抢购取出

  • PHP和Redis实现在高并发下的抢购及秒杀功能示例详解

    抢购、秒杀是平常很常见的场景,面试的时候面试官也经常会问到,比如问你淘宝中的抢购秒杀是怎么实现的等等。 抢购、秒杀...

  • 心得

    关于抢购商品,根据本人很少的抢购经验,限量秒杀型商品全凭个人的手速跟运气(也许有外挂也说不定)。抢购时间长的活动呢...

  • 秒杀系统之一:防止超卖(乐观锁)

    前提:只是为了了解和学习关于秒杀的学习顺便巩固学到的技术点 1.1 秒杀场景 电商抢购限量商品 卖周董演唱会的门票...

  • 高并发秒杀系统

    什么是秒杀 商家在特定时间点,销售限量的商品,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。...

  • 双十一狂欢提前开启,限时秒杀《5折》抢购

    双十一狂欢提前开启,限时秒杀《5折》抢购

  • 秒杀设计

    徐汉彬:Web系统大规模并发——电商秒杀与抢购 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的...

  • 秒杀场景

    “秒杀”这个词在电商行业中出现的频率较高,如京东或者淘宝平台的各种“秒杀”活动,最典型的就是“双11抢购”。“秒杀...

  • 整点抢优惠,优惠送不停

    淘抢购,限时立减:https://s.click.taobao.com/Vr0BrIw 手机淘宝淘抢购秒杀技巧:提...

网友评论

      本文标题:关于抢购,秒杀的技术细节

      本文链接:https://www.haomeiwen.com/subject/icviottx.html