1、秒杀业务的特点

  • 并发性要求高

2、利用Redis实现

(1)预备数据

上线前,将待秒杀产品的产品的ID放入Redis的Set中

(2)秒杀服务

该程序要求可以做集群,所以秒杀业务的状态必须是所有节点可读写的

实现:

  • 检测登录
  • 检测用户是否已经参与
  • 检测商品数量
  • 下发商品:
    • 将产品ID从待秒杀的Redis集中pop出
    • 将产品ID、用户ID等相关信息放入已秒杀的Redis集中
    • 返回商品ID
  • 后台启动一个线程进行已秒杀产品-用户信息的持久化
    • 可以使用线程池,在秒杀服务的Service中启动线程进行持久化
    • 注意此时要使用一个分布式锁方式多个线程都在持久化,浪费资源
    • 分布式锁,使用Redis就可以实现(Spring Redis的setIfAbsent)
  • 返回产品ID或者失败

(3)实现一个负载均衡服务

前端发起秒杀时,先请求负载均衡服务,获取较空闲节点的地址