关键词1
关键词101
关键词201
关键词301
关键词401
关键词501
关键词601
关键词701
关键词801
关键词901
关键词1001
关键词1101
关键词1201
关键词1301
关键词1401
关键词1501
关键词1601
关键词1701
关键词1801
关键词1901
问答1
问答101
问答201
问答301
问答401
问答501
问答601
问答701
问答801
问答901
问答1001
问答1101
问答1201
问答1301
问答1401
问答1501
问答1601
问答1701
问答1801
问答1901
懂视1
懂视101
懂视201
懂视301
懂视401
懂视501
懂视601
懂视701
懂视801
懂视901
懂视1001
懂视1101
懂视1201
懂视1301
懂视1401
懂视1501
懂视1601
懂视1701
懂视1801
懂视1901
文库1
文库101
文库201
文库301
文库401
文库501
文库601
文库701
文库801
文库901
文库1001
文库1101
文库1201
文库1301
文库1401
文库1501
文库1601
文库1701
文库1801
文库1901
分类文章1
分类文章101
分类文章201
分类文章301
分类文章401
分类文章501
分类文章601
分类文章701
分类文章801
分类文章901
分类文章1001
分类文章1101
分类文章1201
分类文章1301
分类文章1401
分类文章1501
分类文章1601
分类文章1701
分类文章1801
分类文章1901
个人技术集锦
全部栏目
返回首页
操作系统
后端开发
数据库
前端开发
移动端开发
首页
操作系统
后端开发
数据库
前端开发
移动端开发
您的当前位置:
首页
正文
秒杀项目中redis的交易验证和库存扣减
2024-11-29
来源:个人技术集锦
交易验证
将用户信息和商品信息缓存在redis中,然后下单请求到来时,会先在redis中进行一个校验操作,具体是校验用户信息是否合法、商品信息是否存在。
库存扣减
先在redis中通过 increment 进行库存的扣减,increment 是一个原子操作,它可以避免并发情况下多个线程对库存进行扣减时产生的数据不一致的问题。比如此时库存为1,进行扣减后为0,扣减成功,而再进行减库存时,库存会变为-1,这里会进行判断,判断库存是否大于等于0,如果大于等于则表示扣减成功,小于0则表示扣减失败。
每次扣减成功后会往消息队列中放入一个 message 信息,目的是用 RocketMQ 的异步特性来更新数据库中的库存,以此减轻了数据库的压力。这里引用了事务消息的机制来保证缓存和数据库中数据的一致性,具体的实现方式是,我们需要保证redis进行的库存扣减,和发送消息到消息队列,这两个操作要么同时成功,要么同时失败,所以生产端在消息队列上开启一个事务,然后给消息队列发送一个半消息,这个半消息包括完整的消息内容, 只是在事务提交前,它对消费端是不可见的。然后执行库存扣减的事务,如果执行成功,就提交事务,事务提交后,半消息就可以被消费了;事务执行失败的话就回滚事务消息。
显示全文