前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第五十章:SpringBoot2.0新特性 - 岂止至今最简单redis缓存集成

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

作者头像
恒宇少年
发布2018-06-27 16:50:01
7790
发布2018-06-27 16:50:01
举报

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

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

本章目标

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

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

专题

专题名称

专题描述

001

Spring Boot 核心技术

讲解SpringBoot一些企业级层面的核心组件

002

Spring Boot 核心技术章节源码

Spring Boot 核心技术简书每一篇文章码云对应源码

003

Spring Cloud 核心技术

对Spring Cloud核心技术全面讲解

004

Spring Cloud 核心技术章节源码

Spring Cloud 核心技术简书每一篇文章对应源码

005

QueryDSL 核心技术

全面讲解QueryDSL核心技术以及基于SpringBoot整合SpringDataJPA

006

SpringDataJPA 核心技术

全面讲解SpringDataJPA核心技术

构建项目

如果之前本地没有Redis环境,请访问第十六章:使用Redis作为SpringBoot项目数据缓存文章阅读配置,接下来

我们先来创建一个新的SpringBoot项目,添加本站所使用的依赖,pom.xml配置文件如下所示:

代码语言:javascript
复制
...省略部分配置
<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文件内,如下所示:

代码语言:javascript
复制
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注解完成开启缓存,如下所示:

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

测试

到现在我们的缓存已经配置完成了,是不是比之前SpringBoot1.x.x版本的时候要简单很多,当然如果你有一些额外的自定义配置也是可以很简单的集成。

我们本章使用的数据读取是SpringDataJPA,如果你之前并没有使用过SpringDataJPA请访问第十三章:SpringBoot实战SpringDataJPA来阅读学习。

测试添加缓存

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

代码语言:javascript
复制
    /**
     * 查询全部用户
     *
     * @return
     */
    @Cacheable(cacheNames = "user.service.all")
    public List<TestUserEntity> findAll() {
        return userRepository.findAll();
    }

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

代码语言:javascript
复制
    /**
     * 测试全部缓存
     */
    @Test
    public void findAll() {
        userService.findAll();
    }

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

代码语言:javascript
复制
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内读取数据与 数据库内读取输出的性能差异。

代码语言:javascript
复制
    @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

代码语言:javascript
复制
第一步:添加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学习目录,感谢阅读!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.04.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本章目标
  • SpringBoot 企业级核心技术学习专题
  • 构建项目
  • 测试
  • 总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档