秒杀:接口优化

  1. Redis预减库存减少数据库访问
  2. 内存标记减少Redis访问
  3. 请求先入队缓冲,异步下单,增强用户体验 RabbitMQ
  4. Nginx水平扩展
  5. 数据库分库分表,用于大型数据库的拆分 MyCat

超卖问题

  1. 数据库加唯一索引:防止用户重复购买
  2. SQL加库存数量判断:防止库存变成负数

秒杀接口优化

思路:减少数据库访问

  1. 系统初始化,把商品库存数量加载到Redis
  2. 收到请求,Redis预减库存,库存不足,直接返回,否则进入3
  3. 请求入队,立即返回排队中 异步下单
  4. 请求出队,服务端生成订单写入缓存,减少库存
  5. 客户端收到排队中会轮询缓存,是否秒杀成功,
    第4、5步并发进行

预减库存带来的问题

//预减库存
        long stock = redisService.decr(GoodsKey.getMiaoShaGoodsStock, ""+goodsId);
        if (stock < 0){
            return Result.error(CodeMsg.MIAO_SHA_OVER);
        }

当库存10,到11个请求时,stock-1,OK;到第12个请求就应该不需要进redis将stock-1了
解决办法
内存标记,减少redis访问

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容