文章目录
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相关依赖。
第一步就是为项目添加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接口测试图文教程
可以看到,我们对数据进行了分页,之前代码中,我们对数据分了20页,这时使用http://localhost:9000/redis?pg=4我们可以成功查询到第五页的数据。
4、JMeter压力测试
1. 设置线程组
2. 设置测试 HTTP请求
3. 设置测试随机数
4. 测试结果
通过压力测试,比较MySQL与Redis的性能,并进行分析。当数据量很庞大时,很明显看出Redis缓存服务器极高的性能。