【Redis】(一)SpringBoot 整合Redis缓存并使用Postman+JMeter进行性能测试

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 【Redis】(一)SpringBoot 整合Redis缓存并使用Postman+JMeter进行性能测试

文章目录


1、SpringBoot 整合 Redis

2、Docker中启动MySQL、Redis

3、Postman测试分页的接口


4、JMeter压力测试

1. 设置线程组

2. 设置测试 HTTP请求

3. 设置测试随机数

4. 测试结果


1、SpringBoot 整合 Redis


Redis是一种高性能的非关系型数据库。Redis作用在内存,性能极高。Spring Boot同样可以把Redis整合到项目里。


打开IDEA ,创建一个新的项目,勾选本次demo中用到的Redis、MySQL相关依赖。


image.png


第一步就是为项目添加Redis依赖。在SpringBoot下有spring-boot-starter-data-redis,使用Redis就相当的简单,可以看到pom.xml文件中已经成功出现。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

     

第二步添加上Redis配置信息。包括Redis服务器的IP、端口、密码等信息,前提是已经安装好Redis服务,密码等信息必须和服务器一致。


我们这里配置的Redis都是在Docker容器中的,application.yml内容如下所示。

server:
  port: 9000
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.56.100:3306/shoppings
    username: root
    password: ok
  redis:
    database: 0
    host: 192.168.56.100
    port: 6379
    password:


第三步,接下来就要写例子来使用使用Redis,在这个例子中使用的是框架封装Redis的类StringRedisTemplate。为啥用这个呢?,因为例子设计的k-v都是String类型,官方建议符合这种格式的推荐使用 StringRedisTemplate。当k-v是非String类型的object时,推荐使用RedisTemplate。services 层 Goodservices.java 如下所示,实体类 Goods,dao 层 GoodsDAO 很简单就不附上了。


通过saveRedis方法进行数据转化,将MySQL数据库中内容转到Redis数据库中,注意这里执行过一次之后通过findRedisData方法实现分页。

package com.kgc.msrd.services;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kgc.msrd.dao.GoodsDAO;
import com.kgc.msrd.entity.Goods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class Goodsservice {
    @Autowired
    private GoodsDAO goodsDAO;
    @Autowired
    private StringRedisTemplate redisTemplate;
    public List<Goods> findAll(int pg){
        return goodsDAO.findAll((pg-1)*20);
    }
    /*数据转化 mysql数据库中内容转到redis数据库中,当数据成功转出后这段代码便可以注去*/
    public void saveRedis(){
//        List<String> res=new ArrayList<String>();
//        List<Goods> goods=findAll();
//        ObjectMapper om=new ObjectMapper();
//        for(Goods gd:goods){
//            try {
//                res.add(om.writeValueAsString(gd));
//            } catch (JsonProcessingException e) {
//                e.printStackTrace();
//            }
//        }
//        redisTemplate.opsForList().leftPushAll("good",res);
    }
    public List<String> findRedisData(int pg){
        return redisTemplate.opsForList().range("good",(pg-1)*20,pg*20-1);
    }
}


controller层 InitCtrl

package com.kgc.msrd.controller;
import com.kgc.msrd.entity.Goods;
import com.kgc.msrd.services.Goodsservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class InitCtrl {
    @Autowired
    private Goodsservice goodsservice;
    @RequestMapping("/mysql")
    public List<Goods> init(int pg){
        return goodsservice.findAll(pg);
    }
/*    @RequestMapping("/save")
    public String save(){
        goodsservice.saveRedis();
        return "ok";
    }*/
    @RequestMapping("/redis")
    public List<String> rd(int pg){
        return goodsservice.findRedisData(pg);
    }
}


package com.kgc.msrd;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.kgc.msrd.dao")
public class MsrdApplication {
    public static void main(String[] args) {
        SpringApplication.run(MsrdApplication.class, args);
    }
}


2、Docker中启动MySQL、Redis


每一次登录,我们先要重启网络、重启容器

systemctl restart network
systemctl restart docker


在Xshell 6 Docker上使用命令,进入Redis

[root@zj ~]# docker start redis
redis
[root@zj ~]# docker exec -it redis /bin/bash
root@4e6d4e0082e8:/data# redis-cli -h localhost


3、Postman测试分页的接口


接下来使用postman进行接口测试。


Postman的使用可以参考这篇教程:接口测试工具Postman接口测试图文教程


image.png

image.png


可以看到,我们对数据进行了分页,之前代码中,我们对数据分了20页,这时使用http://localhost:9000/redis?pg=4我们可以成功查询到第五页的数据。


4、JMeter压力测试


1. 设置线程组


image.png


2. 设置测试 HTTP请求


image.png


3. 设置测试随机数


image.png


4. 测试结果


通过压力测试,比较MySQL与Redis的性能,并进行分析。当数据量很庞大时,很明显看出Redis缓存服务器极高的性能。


image.png

目录
相关文章
|
2月前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
4月前
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
5月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
616 0
|
1月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
813 2
|
2月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
460 11
|
4月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
233 0
|
5月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
973 23
|
5月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
337 5
|
7月前
|
数据可视化 测试技术 API
JMeter、Apipost 与 Postman 的 API 测试对比:为什么 APIPost 是更聪明的选择
API测试如同筹备一场晚宴,选对工具至关重要。JMeter功能强大但上手难,适合专业用户;Postman简单易用,但在复杂场景和团队协作中表现有限;而Apipost则是一款智能高效的“厨房神器”。它性能测试轻松、结果清晰、学习门槛低,并且能一键集成CI/CD流程。对于追求效率与便捷的团队而言,Apipost无疑是更优选择,让API测试如同五星大厨烹饪般丝滑流畅。
|
7月前
|
存储 前端开发 数据可视化
Postman vs. Apifox 用于 API 测试全面对比
寻找一款可靠的 API 测试工具?这份对比分析将深入探讨 Postman 和 Apifox 的功能和特性。了解哪款工具最适合您的 API 测试需求。
下一篇
oss云网关配置