第五十章:SpringBoot2.0新特性 - 岂止至今最简单redis缓存集成

自从SpringBoot升级到了2.0版本后集成Redis作为缓存就更为简单了,我们只需要配置Redis相关的链接信息以及使用注解@EnableCaching开启缓存,这样我们就直接可以在项目内使用缓存相关的内容。

由于最近这段时间一直在研发公司的持久化封装框架,用于编写文章的时间比较少,还请大家见谅,不过还会持续更新SpringBoot以及SpringCloud等系列文章,敬请期待!!!

本章目标

基于SpringBoot2完成快速集成Reids作为项目缓存,并讲解一些缓存常用的配置。

SpringBoot 企业级核心技术学习专题

专题专题名称专题描述
001Spring Boot 核心技术讲解SpringBoot一些企业级层面的核心组件
002Spring Boot 核心技术章节源码Spring Boot 核心技术简书每一篇文章码云对应源码
003Spring Cloud 核心技术对Spring Cloud核心技术全面讲解
004Spring Cloud 核心技术章节源码Spring Cloud 核心技术简书每一篇文章对应源码
005QueryDSL 核心技术全面讲解QueryDSL核心技术以及基于SpringBoot整合SpringDataJPA
006SpringDataJPA 核心技术全面讲解SpringDataJPA核心技术

构建项目

如果之前本地没有Redis环境,请访问第十六章:使用Redis作为SpringBoot项目数据缓存文章阅读配置,接下来
我们先来创建一个新的SpringBoot项目,添加本站所使用的依赖,pom.xml配置文件如下所示:

...省略部分配置
<dependencies>
        <!--spring data jpa依赖添加-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--redis依赖添加-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--web相关依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--数据库依赖添加-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--druid依赖添加-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.8</version>
        </dependency>
        <!--lombok依赖添加-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.44</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--性能测试依赖-->
        <dependency>
            <groupId>org.databene</groupId>
            <artifactId>contiperf</artifactId>
            <version>2.3.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
    </dependencies>
...省略部分配置

在本章的依赖内我们添加了contiperf性能测试工具,用于测试分别从数据库、缓存内读取的性能差异。

配置Redis信息

我比较喜欢使用yml文件方式进行配置,先来删除之前项目自动创建的application.properties文件,新创建一个名为application.yml的配置文件,添加Redis相关的配置信息到application.yml文件内,如下所示:

spring:
  application:
    name: spring-boot-redis
  jpa:
    database: mysql
    show-sql: true
  datasource:
    druid:
      username: root
      password: 123456
      url: jdbc:mysql://localhost:3306/test
  # 配置Redis的连接密码
  redis:
    password: hengyuboy

由于Redis有很多默认的配置,默认连接localhost上的Redis,我们这里仅仅配置连接的密码就可以了,其他的都使用默认的配置。

开启缓存

我们找到创建的XxxApplication入口程序类,在该类上添加@EnableCaching注解完成开启缓存,如下所示:

/**
 * spring-boot-redis集成项目启动类入口
 *
 * @author yuqiyu
 * @EnableCaching 注解配置启用缓存,自动配置配置文件的配置信息进行条件注入缓存所需实例
 */
@SpringBootApplication
@EnableCaching
public class SpringBootRedisApplication {
}

测试

到现在我们的缓存已经配置完成了,是不是比之前SpringBoot1.x.x版本的时候要简单很多,当然如果你有一些额外的自定义配置也是可以很简单的集成。
我们本章使用的数据读取是SpringDataJPA,如果你之前并没有使用过SpringDataJPA请访问第十三章:SpringBoot实战SpringDataJPA来阅读学习。

测试添加缓存

我们先来创建一个查询方法完成简单的数据缓存,方法如下所示:

    /**
     * 查询全部用户
     *
     * @return
     */
    @Cacheable(cacheNames = "user.service.all")
    public List<TestUserEntity> findAll() {
        return userRepository.findAll();
    }

接下来编写一个简单的单元测试,我们直接使用创建项目时创建的测试类,在测试类内添加一个测试方法,如下所示:

    /**
     * 测试全部缓存
     */
    @Test
    public void findAll() {
        userService.findAll();
    }

当我们第一次启动findAll测试方法时可以看到控制台输出的SQL,如下所示:

Hibernate: select testuseren0_.ui_id as ui_id1_0_, testuseren0_.ui_age as ui_age2_0_, testuseren0_.ui_name as ui_name3_0_, testuseren0_.ui_password as ui_passw4_0_ from test_user_info testuseren0_

本次的数据是从数据库内查询到的,接下来我们再次执行 findAll方法来看下控制台,这时我们并没有看到输出的SQL,证明本次的数据是从Redis缓存内读取得到的。

性能测试

我们在pom.xml配置文件内已经添加了性能测试的依赖contiperf,那么下面我们来测试下从 Redis内读取数据与 数据库内读取输出的性能差异。

    @Rule
    public ContiPerfRule i = new ContiPerfRule();

    /**
     * 性能测试
     * 10万次查询,100个线程同时操作findAll方法
     */
    @Test
    @PerfTest(invocations = 100000, threads = 100)
    public void contextLoads() {
        userService.findAll();
    }

我们的测试是查询10万次,并且开启100个线程来完成这个测试方法,我们先来测试使用缓存的性能,如下图所示:
Redis10万性能测试
这是contiperf执行生成的数据统计,当我们运行性能测试方法完成后,contiperf就会自动在target->contiperf-report下自动生成一个index.html来统计本次执行的状况。
我们使用Redis缓存时一共耗时23秒,下面我们把@Cacheable(cacheNames = "user.service.all")注解注释掉,再来执行一遍性能测试方法。

我们在运行测试的时候可以看到控制台的查询SQL在不停的输出,这也证明了我们的数据是直接从数据库内获取的,测试结果如下图所示:
数据库10万性能测试
从上图内可以看到一共耗时:43秒,效果已经很明显了,当然我这是本机模拟测试,如果是读取正在大并发高IO读取的服务器上时差距会更大。

总结

本章主要讲解了SpringBoot2.0版本如何快速的集成Redis

第一步:添加spring-boot-starter-data-redis依赖
第二步:配置@EnableCaching开启缓存
第三步:在application.yml内配置Redis相关的信息
第四步:配置@Cacheable注解完成数据缓存

本章源码已经上传到码云:
SpringBoot配套源码地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相关系列文章请访问:目录:SpringBoot学习目录
QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录
SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录,感谢阅读!

更多干货文章扫码关注微信公众号

扫码关注 - 专注分享

加入知识星球,恒宇少年带你走以后的技术道路!!!

微信扫码加入

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值