您的当前位置:首页正文

秒杀项目中redis的交易验证和库存扣减

2024-11-29 来源:个人技术集锦

交易验证

  • 将用户信息和商品信息缓存在redis中,然后下单请求到来时,会先在redis中进行一个校验操作,具体是校验用户信息是否合法、商品信息是否存在。

库存扣减

  • 先在redis中通过 increment 进行库存的扣减,increment 是一个原子操作,它可以避免并发情况下多个线程对库存进行扣减时产生的数据不一致的问题。比如此时库存为1,进行扣减后为0,扣减成功,而再进行减库存时,库存会变为-1,这里会进行判断,判断库存是否大于等于0,如果大于等于则表示扣减成功,小于0则表示扣减失败。
  • 每次扣减成功后会往消息队列中放入一个 message 信息,目的是用 RocketMQ 的异步特性来更新数据库中的库存,以此减轻了数据库的压力。这里引用了事务消息的机制来保证缓存和数据库中数据的一致性,具体的实现方式是,我们需要保证redis进行的库存扣减,和发送消息到消息队列,这两个操作要么同时成功,要么同时失败,所以生产端在消息队列上开启一个事务,然后给消息队列发送一个半消息,这个半消息包括完整的消息内容, 只是在事务提交前,它对消费端是不可见的。然后执行库存扣减的事务,如果执行成功,就提交事务,事务提交后,半消息就可以被消费了;事务执行失败的话就回滚事务消息。
显示全文