入门基础必备,使用Idea实现SpringBoot+Mysql+Redis+RabbitMQ+Jmeter模拟实现高并发秒杀

本文介绍了如何使用SpringBoot、Mysql、Redis和RabbitMQ构建高并发秒杀系统,防止超卖。通过设置Redis缓存和RabbitMQ消息队列,模拟了40个并发用户进行秒杀,对比了纯数据库秒杀可能出现的超卖问题。文章适合初学者,提供了详细的环境搭建、代码编写和测试步骤。
摘要由CSDN通过智能技术生成

文章前言

众所周知,当遇到比较多数据不一致的问题时,大多数都是因为并发请求时,没及时处理的原因,提一个电商平台比较经常出现得高并发场景限时秒杀活动,他们是怎么来防止超卖呢?如何实现高并发秒杀呢?。
本文模拟了高并发秒杀并且防止了超卖,也模拟了纯数据库秒杀超卖得场景,本次模拟demo得框架技术为:

SpringBoot+Mysql+Redis+RabbitMQ+tkmybatis

本文为基础教程,内容较多,专为刚接触这方面得程序员了解,说得都是自己简单得理解,大佬轻喷!!先赞后看,已成习惯

1.搭建项目环境

开始本次测试之前,先说本次我们项目需要安装得工具以及环境,下方我提供了安装工具得博客

1.1 安装RabbitMQ

关于RabbitMQ我得上篇博客介绍得比较详细,这里也给一个安装路径
RabbitMQ安装教程

1.2 Redis+RedisDesktopManager

关于Redis缓存,Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
看到有意思得一句话,不用redis得秒杀都是耍流氓!!
下方为Redis和RedisDesktopManager安装教程
Redis和RedisDesktopManager安装教程

1.3 Jmeter压力测试工具

Jmeter为基于java得压力测试工具,本文用它模仿40个不同得用户同时发送请求秒杀商品,下方为Jmeter得安装教程
Jmeter安装教程

温馨提示:JDK版本建议为1.8

1.4数据库表结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一个为库存表,一个为订单表,本人使用得是mysql8.0 !!

完整得项目工具展示

Jmeter :
在这里插入图片描述
redisManager :
在这里插入图片描述
RabbitMQ :
在这里插入图片描述

2.编写代码

  1. 首先新建Springboot项目
    在这里插入图片描述
  2. 可以先不勾选需要得jar包,项目初始化好之后,使用maven导入项目需要得jar包
    pom.xml :
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.3-beta1</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>4.0.0</version>
        </dependency>
    </dependencies>
  1. 配置application.properties
spring.devtools.restart.enabled=false
##配置数据库连接
spring.datasource.username=root 
spring.datasource.password=root
server.port=8443
spring.datasource.url=jdbc:mysql://localhost:3306/ktoa?useUnicode=true
  • 42
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值