作者:我叫yyson_836 | 来源:互联网 | 2023-09-25 10:35
秒杀:秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。
秒杀相关特点:
- 秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增。
- 秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功。
- 秒杀业务流程比较简单,一般就是下订单减库存。
秒杀解决方案:
采用数据库乐观锁来解决 乐观锁给当前操作添加一个限定条件(Version版本号) ,如果限定条件不满足就无法执行成功或者版本号不一致也无法成功。
令牌机制实现秒杀业务(推荐)
- 利用定时任务将某些商品在规定时间之后要开启秒杀,根据库存量同步到Redis中。根据每一个商品产生对应的token数量,采用Redis中的List数据类型存储每个商品的令牌。(采用List数据类型存储的原因主要是每一个线程从List中pop时是单线程处理的,所以每一个线程拿到的令牌就不可能是同一个了)
- 在秒杀期间,每一个用户都去获取对应商品中的令牌(判断令牌是否有效-非空判断,如果是已经被支付过的token就不能再次被抢购)
- 超时未支付,归还令牌 支付成功,产生订单,标记当前令牌已经被支付,同时删除当前令牌。
最后 召唤镇楼大神