秒杀系统优化:Redis+MQ实战方案

黑马点评秒杀优化方案

Redis预减库存与异步下单
秒杀开始前将商品库存加载到Redis,用户请求到达时先执行Redis库存预减,避免频繁访问数据库。预减成功后生成异步下单任务,通过消息队列(如RabbitMQ)削峰填谷,保证系统稳定性。

分布式锁防超卖
使用Redis的SETNX命令或Redisson实现分布式锁,确保库存扣减和订单创建的原子性。锁粒度细化到商品ID级别,避免全局锁的性能瓶颈。

缓存热点数据
采用多级缓存策略:Nginx本地缓存+Redis集群缓存+JVM缓存。针对热点商品使用Redis Cluster分片存储,配合HASH TAG保证同一商品数据落在同一节点。

限流与降级

  • 网关层限流:通过Sentinel或Nginx限制QPS
  • 接口层限流:使用Guava RateLimiter
  • 降级策略:当库存不足时直接返回静态页面,减少后端压力

场景补充设计

秒杀结果轮询
前端提交请求后通过/result接口轮询结果,后端采用Redis存储订单状态(key为userID:goodsID),避免频繁查询数据库。

库存预热与分段扣减
活动前通过定时任务将库存分段加载到Redis(如分10段),扣减时随机选择段位,减少单个Key的竞争压力。

数据一致性保障

  • 最终一致性:通过MQ重试机制确保异步下单成功
  • 对账补偿:定时任务核对Redis与数据库库存差异
  • 事务消息:RocketMQ事务消息保证本地事务与消息发送的原子性

性能压测指标

基准数据建议

  • 单机TPS:≥2000(4核8G配置)
  • Redis集群:≥5万QPS
  • 消息处理延迟:<500ms
  • 订单创建耗时:<100ms(异步场景)

监控维度

  • Redis集群CPU/内存/网络IO
  • MQ积压情况监控
  • 服务接口TP99响应时间
  • 数据库慢查询日志分析

代码示例(关键逻辑)

Redis库存预减

public boolean seckillPreReduce(Long goodsId) {
    String key = "seckill:stock:" + goodsId;
    Long remain = redisTemplate.opsForValue().decrement(key);
    if (remain < 0) {
        redisTemplate.opsForValue().increment(key); // 回滚
        return false;
    }
    return true;
}

分布式锁实现

public boolean createOrder(Long userId, Long goodsId) {
    String lockKey = "seckill:lock:" + goodsId;
    RLock lock = redissonClient.getLock(lockKey);
    try {
        if (lock.tryLock(1, 10, TimeUnit.SECONDS)) {
            // 执行库存扣减与订单创建
        }
    } finally {
        lock.unlock();
    }
}

消息队列消费

@RabbitListener(queues = "seckill.queue")
public void processOrder(SeckillMessage message) {
    // 异步处理订单创建
    orderService.createAsyncOrder(message);
}

BbS.okapop001.sbs/PoSt/1122_625357.HtM
BbS.okapop002.sbs/PoSt/1122_889371.HtM
BbS.okapop003.sbs/PoSt/1122_468142.HtM
BbS.okapop004.sbs/PoSt/1122_134847.HtM
BbS.okapop005.sbs/PoSt/1122_422498.HtM
BbS.okapop006.sbs/PoSt/1122_732891.HtM
BbS.okapop007.sbs/PoSt/1122_633320.HtM
BbS.okapop008.sbs/PoSt/1122_136921.HtM
BbS.okapop009.sbs/PoSt/1122_942875.HtM
BbS.okapop010.sbs/PoSt/1122_796914.HtM
BbS.okapop001.sbs/PoSt/1122_902837.HtM
BbS.okapop002.sbs/PoSt/1122_026426.HtM
BbS.okapop003.sbs/PoSt/1122_646776.HtM
BbS.okapop004.sbs/PoSt/1122_285203.HtM
BbS.okapop005.sbs/PoSt/1122_034667.HtM
BbS.okapop006.sbs/PoSt/1122_794731.HtM
BbS.okapop007.sbs/PoSt/1122_964495.HtM
BbS.okapop008.sbs/PoSt/1122_555094.HtM
BbS.okapop009.sbs/PoSt/1122_212832.HtM
BbS.okapop010.sbs/PoSt/1122_003172.HtM
BbS.okapop001.sbs/PoSt/1122_888933.HtM
BbS.okapop002.sbs/PoSt/1122_628858.HtM
BbS.okapop003.sbs/PoSt/1122_721767.HtM
BbS.okapop004.sbs/PoSt/1122_989343.HtM
BbS.okapop005.sbs/PoSt/1122_455210.HtM
BbS.okapop006.sbs/PoSt/1122_519452.HtM
BbS.okapop007.sbs/PoSt/1122_914212.HtM
BbS.okapop008.sbs/PoSt/1122_868379.HtM
BbS.okapop009.sbs/PoSt/1122_582950.HtM
BbS.okapop010.sbs/PoSt/1122_752083.HtM
BbS.okapop001.sbs/PoSt/1122_873711.HtM
BbS.okapop002.sbs/PoSt/1122_790600.HtM
BbS.okapop003.sbs/PoSt/1122_560147.HtM
BbS.okapop004.sbs/PoSt/1122_972556.HtM
BbS.okapop005.sbs/PoSt/1122_070290.HtM
BbS.okapop006.sbs/PoSt/1122_710586.HtM
BbS.okapop007.sbs/PoSt/1122_050940.HtM
BbS.okapop008.sbs/PoSt/1122_845519.HtM
BbS.okapop009.sbs/PoSt/1122_135003.HtM
BbS.okapop010.sbs/PoSt/1122_262473.HtM
BbS.okapop001.sbs/PoSt/1122_440488.HtM
BbS.okapop002.sbs/PoSt/1122_111750.HtM
BbS.okapop003.sbs/PoSt/1122_821549.HtM
BbS.okapop004.sbs/PoSt/1122_080602.HtM
BbS.okapop005.sbs/PoSt/1122_372727.HtM
BbS.okapop006.sbs/PoSt/1122_307730.HtM
BbS.okapop007.sbs/PoSt/1122_350417.HtM
BbS.okapop008.sbs/PoSt/1122_156209.HtM
BbS.okapop009.sbs/PoSt/1122_998345.HtM
BbS.okapop010.sbs/PoSt/1122_395846.HtM
BbS.okapop001.sbs/PoSt/1122_665362.HtM
BbS.okapop002.sbs/PoSt/1122_857952.HtM
BbS.okapop003.sbs/PoSt/1122_548421.HtM
BbS.okapop004.sbs/PoSt/1122_789553.HtM
BbS.okapop005.sbs/PoSt/1122_147987.HtM
BbS.okapop006.sbs/PoSt/1122_654978.HtM
BbS.okapop007.sbs/PoSt/1122_693989.HtM
BbS.okapop008.sbs/PoSt/1122_389081.HtM
BbS.okapop009.sbs/PoSt/1122_892874.HtM
BbS.okapop010.sbs/PoSt/1122_465330.HtM
BbS.okapop001.sbs/PoSt/1122_701499.HtM
BbS.okapop002.sbs/PoSt/1122_091917.HtM
BbS.okapop003.sbs/PoSt/1122_025599.HtM
BbS.okapop004.sbs/PoSt/1122_603961.HtM
BbS.okapop005.sbs/PoSt/1122_052736.HtM
BbS.okapop006.sbs/PoSt/1122_123005.HtM
BbS.okapop007.sbs/PoSt/1122_755485.HtM
BbS.okapop008.sbs/PoSt/1122_753938.HtM
BbS.okapop009.sbs/PoSt/1122_385702.HtM
BbS.okapop010.sbs/PoSt/1122_216436.HtM
BbS.okapop001.sbs/PoSt/1122_141769.HtM
BbS.okapop002.sbs/PoSt/1122_062067.HtM
BbS.okapop003.sbs/PoSt/1122_702185.HtM
BbS.okapop004.sbs/PoSt/1122_759622.HtM
BbS.okapop005.sbs/PoSt/1122_895016.HtM
BbS.okapop006.sbs/PoSt/1122_929669.HtM
BbS.okapop007.sbs/PoSt/1122_649134.HtM
BbS.okapop008.sbs/PoSt/1122_256524.HtM
BbS.okapop009.sbs/PoSt/1122_864727.HtM
BbS.okapop010.sbs/PoSt/1122_338737.HtM

#牛客AI配图神器#

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务