《进大厂系列》系列-秒杀系统设计

面试了十个应届生九个都是秒杀系统,你确定你们那是秒杀?

Url动态化

秒杀系统中如何动态生成下单随机URL

个人理解:

  1. 前端调用下单接口之前先调用一个获取md5的接口
    1. 未到秒杀时间开始不得响应
    2. 接口不得重复提交,一个唯一标识的用户只能指定时间获取一次
  2. 调用下单接口url地址pathValue拼接当前md5实现调用接口地址动态化

目的:
防止秒杀活动开始前,下单地址被提前获取进而造成利用脚本刷单情况发生。

前端资源静态化

CDN这种对前端资源缓存,加速访问

前端按钮控制

  1. 默认置灰,不可按。调用时候调用接口查询北京时间然后开启
  2. 时间到了,也可以延时1秒左右按钮正常可点击

Redis

  1. 可以使用Redis集群
  2. 使用lua脚本实现redis的cas操作,避免redis库存更新在并发情况出现问题

数据库乐观锁提高效率

示例语句

update table set count = count -1,version = version +1  where goodsid=1 and count > 0 and version = xxx

悲观锁

  1. for update 行锁
  2. 储存过程

MQ进行消费

通过MQ对秒杀订单进行处理消费