秒杀系统中的接口优化

在秒杀系统中我们如何对接口进行优化呢?

1.Redis预减库存减少数据库的访问
2.内存标记减少Redis的访问
3.请求先入队缓冲(RabbitMQ),异步下单
4. Nginx水平扩展

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


1.Redis预减少数据库的访问

整个优化的核心思路还是减少对数据库的访问。具体思路如下
1. 系统初始化,把商品库存数量加载到Redis
2. 收到请求,Redis预减库存,库存不足,直接返回,否则进入3
3. 请求入队,立即返回排队中
4. 请求出队,生成订单,减少库存
5. 客户端轮询,是否秒杀成功

首先我们实现,在系统初始化的适合,就将商品的库存数量加载进Redis中。这里我们可以使用到Spring中的InitializingBean接口,这个接口实现的afterPropertiesSet()方法,会在Bean刚被加载的适合就直接被调用,具体可以看我Spring spring中InitializingBean接口和ApplicationContextAware接口这篇博文。

使用afterPropertiesSet()方法,将商品库存存入redis

/**
* 系统初始化
* */
public void afterPropertiesSet() throws Exception {
    List<GoodsVo> goodsList = goodsService.listGoodsVo();
    if(goodsList == null) {
        return;
    }
    for(GoodsVo goods : goodsList) {
        redisService.set(GoodsKey.getMiaoshaGoodsStock, ""+goods.getId(), goods.getStockCount());
        localOverMap.put(goods.getId(), false);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值