秒杀新解

76 阅读1分钟

我们从一个大家都熟悉的电商抢单(秒杀)场景来看:

在抢单系统中,除了Redis的单线程特性和多路复用,下面这些都可以用来提高系统性能和并发处理能力。:

  1. 分段锁和并发抢库存:

    • 将库存分成多个段,每个段独立加锁和更新。
    • 使用CAS(Compare and Swap)操作进行原子性更新。
    • 实现:可以使用Redis的WATCH命令实现乐观锁,或使用Lua脚本保证原子性。
  2. 预扣库存:

    • 在用户下单时先预扣库存,设置一个短暂的过期时间。
    • 如果用户支付成功,则确认扣减;如果超时未支付,自动释放库存。
  3. 消息队列削峰:

    • 使用消息队列(如Kafka、pulsar)接收抢单请求。
    • 后台服务从队列中消费消息,处理抢单逻辑。
  4. 多级缓存:

    • 使用本地缓存(如Guava Cache)+分布式缓存(Redis)。
    • 对于热点商品,可以将库存信息缓存在应用服务器本地内存中。
  5. 读写分离:

    • 将读操作和写操作分离到不同的服务或数据库实例上。
    • 可以使用数据库主从复制实现。
  6. 异步处理:

    • 将非核心流程异步化,如订单生成、日志记录等。
  7. 限流和熔断:

    • 使用令牌桶或漏桶算法进行限流。
    • 实现熔断机制,防止系统过载。
  8. 分库分表:

    • 对数据进行水平拆分,提高数据库并发处理能力。
  9. 缓存预热:

    • 在高峰期前,提前将热点数据加载到缓存中。
  10. 业务层面优化:

    • 设置抢购资格预筛选。
    • 实现排队机制,控制并发量。