【性能优化】秒杀系统性能优化

本文探讨了秒杀系统的性能优化,包括代码优化、数据库连接池配置、缓存使用、异步处理和限流策略。通过调整连接池参数,如设置初始连接数,改善了系统吞吐量;利用Redis作为分布式缓存,显著提升了处理速度;引入RabbitMQ实现异步处理,进一步增强系统处理请求的能力;并讨论了不同限流算法的应用。JVM层面,选择了Parallel&Parallel Old垃圾收集器以优化吞吐量。
摘要由CSDN通过智能技术生成

秒杀系统性能优化

优化之前的准备

在吞吐量、延迟和内存这三点中选择我们业务的着重点。

例如本次这个系统,我认为应该更加注重吞吐量。

为什么更加注重吞吐量?

延迟:像我们大家平时去进行商品抢购的时候,应该都会觉得现在人太多了,卡一卡没什么问题(但是也不能太久,你给我直接来个10s,肯定给你差评),只关心的是最后我有没有抢到商品。所以我认为延迟这方面应该是其次,主要的是系统处理请求的数量。

内存占用:一般秒杀活动都会有时间限制,这段时间也不会占用太大的内存。我电脑16G也不用担心,如果真的内存很缺少,可以考虑考虑。
所以在保证TP99不超过1.5s(抢购)/0.2s(进入抢购界面)的情况下,最大提高的系统的吞吐量。

代码优化

将写入Redis缓存代码与数据库事务分开

​ 防止网络抖动可能导致写缓存响应时间较慢,阻塞数据库事务。

原始代码:

/**
 * 下订单、减库存事务(原始代码)
 */
@Transactional
public void seckillTransaction(SeckillDto seckillDto, GoodDto goodDto){
   
    
    //添加订单操作......
    
    //减库存操作......

    //写入缓存,不用再调用数据库判断是否还能继续抢购
    if (goodDto.getSurplusCount() <= 0){
   
        redisTemplate.delete(seckillDto.getGoodId().toString());
        redisTemplate.opsForValue().set(seckillDto.getGoodId().toString(), JSONObject.toJSONString(goodDto), 320, TimeUnit.SECONDS);
    }

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值