Java电商秒杀系统性能优化(六)——交易性能优化技术之缓存库存

本文聚焦Java电商秒杀系统的交易性能优化,通过缓存库存模型解决验证缓存和数据库行锁问题。利用Rocketmq实现异步消息队列,保证分布式事务的最终一致性,提升交易速度并降低数据库压力。详细探讨了Rocketmq的部署模型、主从复制机制、分布式事务以及安装步骤。
摘要由CSDN通过智能技术生成

概述

本篇博客介绍了下单交易的性能优化技术,通过交易验证缓存的优化,库存缓存模型优化解决了交易流程中繁琐耗性能的验证缓存,并解决数据库库存行锁的问题,同时也引入了缓存与数据库分布式提交过程中不一致的风险。

本章的学习目标是:

  • 掌握高效交易验证方式
  • 掌握缓存库存模型

一、高效交易验证


1.1 交易性能瓶颈

  • 采用jmeter压测进行性能压测,请求改为POST请求,加入消息体中,average 500ms tps200/s cpu% 75%;
    交易验证完全依赖数据库,通过SQL语句的方式发送给数据库,完成读操作;
  • 库存行锁
  • 后置处理逻辑
    在这里插入图片描述

1.2 交易验证优化

  • 获取用户信息,用户风控策略优化:策略缓存模型化,将对应的风控内容做到redis缓存里面,例如是否异地登录账号异常,将风控的策略通过异步的方式写入对应缓存中,在实时查询过程中做一个风控策略的实时拦截;
  • 活动校验策略优化:引入活动发布流程,模型缓存化,紧急下线能力;
    运营发现活动有异常,在后台将对应的活动进行修改,比如将活动提前结束。若线上在redis的缓存没有正常过期,即便修改了活动时间,但是用户还是可以以活动秒杀价格交易,因此需要一个紧急下线能力。所以运营人员至少要在活动开始前半个小时将活动发布上去,半个小时内足够进行缓存的预热。在后设计一个紧急下线的接口,用代码实现可以清除redis内的缓存。当redis内无法查询状态,就会去数据库内查询活动状态,从而达到紧急下架的能力;

验收效果
jmeter验收验证优化效果
Average time = 600ms tps=1200/s

二、缓存库存模型

2.1 库存行锁优化

itemId需要创建唯一索引

alter table item_stock add unique index
item_id_index(item_id)

2.1.1 扣减库存缓存化

方案

  • 活动发布同步库存进缓存;
  • 下单交易减缓存库存;

问题:
数据库记录不一致,缓存中修改了但是数据库中的数据没有进行修改;

2.1.2 异步同步数据库

方案

  • 活动发布同步库存进缓存;
  • 下单交易减缓存库存;
  • 异步消息扣减数据库内库存;

可以让C端用户完成购买商品的高效体验,又能保证数据库最终的一致性;

2.2 异步消息队列rocketmq

rocketmq

  • 高性能,高并发,分布式消息中间件;
  • 典型应用场景:分布式事务,异步解耦;

RocketMQ原理

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值