Spring Boot学习笔记——Spring Boot与Redis的集成

一.添加Redis缓存

1.添加Redis起步依赖

在pom.xml中添加Spring Boot支持Redis的依赖配置,具体如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
    <version>1.4.7.RELEASE</version>
</dependency>

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-redis/1.4.7.RELEASE

2.添加缓存注解

(1) 在引导类DemoApplication.java中,添加@EnableCaching注解开启缓存,添加后的代码:

DemoApplication.java:

package com.zifeiy.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

(2)在业务逻辑类UserServiceImpl的getAllUsers()方法上添加@Cacheable注解来支持缓存,添加后的实现代码如下:

UserServiceImpl.java:

    // 查询所有用户
    @Override
    @Cacheable(value="UserCache",key="‘user.getAllUsers‘")
    public List<User> getAllUsers() {
        return this.UserMapper.getAllUsers();
    }

需要注意的是,@Cacheable注解中的key属性除了需要被英文双引号引用外,还需要加入英文单引号,否则系统在执行缓存操作时将出错。

如果忘了加单引号,最后运行起来可能就会报这样的错误:

EL1008E: Property or field ‘user‘ cannot be found on object of type ‘org.springframework.cache.interceptor.CacheExpressionRootObject‘ - maybe not public or not valid?] with root cause

3.使实体类实现可序列化接口

为了便于数据的传输,需要将实体类User实现序列化接口Serializable,具体代码如下:

public class User implements Serializable {
    private Integer id;
    private String username;
    private String address;
    ...

4.制定Redis缓存主机地址

通常情况下,Redis缓存与Web应用并非部署在一台机器上,此时就需要远程调用Redis。在application.properties中添加指定Redis所在主机及其端口号的配置,具体如下:

spring.redis.host=127.0.0.1
spring.redis.port=6379

5.启动项目,测试缓存使用

启动Redis服务,并启动本地项目,在浏览器地址栏中输入访问地址http://localhost:8080/user.html,Eclipse控制台中的显示信息如下:

2018-05-20 11:10:03.486 DEBUG 9369 --- [nio-8080-exec-8] c.z.demo.mapper.UserMapper.getAllUsers   : ==>  Preparing: select * from tb_user
2018-05-20 11:10:03.519 DEBUG 9369 --- [nio-8080-exec-8] c.z.demo.mapper.UserMapper.getAllUsers   : ==> Parameters:
2018-05-20 11:10:03.574 DEBUG 9369 --- [nio-8080-exec-8] c.z.demo.mapper.UserMapper.getAllUsers   : <==      Total: 3

可以看到,程序已经执行了SELECT语句,并查询出3条数据。此时如果刷新浏览器,系统将会再次执行查询操作。在没有使用Redis缓存之前,每刷新一次页面,都会执行一次查询数据库的操作,添加缓存后,会发现控制台中只出现了一次查询语句(我这里好像什么都没有出现),这也就说明所配置的Redis缓存已经生效。

二、删除Redis缓存

Redis中的数据不会一直存在,当执行添加、更新和删除操作后,数据库中的数据会发生变化,而Redis缓存中的数据同样也需要进行相应的变化。为了保证Redis缓存中的数据与数据库中的一致,通常需要在执行添加、更新和删除操作之前清除缓存,然后在下一次执行查询操作时,将新的数据存储到Redis缓存中。

要实现清楚缓存的功能很简单,只需在相应方法中使用@CacheEvict注解即可。以删除用户为例,在用户业务逻辑类的deleteUser()方法上添加@CacheEvict注解信息,如下:

UserServiceImpl.java:

    // 删除用户
    @Override
    @CacheEvict(value="UserCache",key="‘user.getAllUsers‘")
    public void deleteUser(Integer id) {
        System.out.println("删除了id为 " + id + " 的用户");
        this.UserMapper.delete(id);
    }

启动项目后,进入http://localhost:8080/user/delete/1就会删除id=1的用户信息。

eclipse控制台的信息如下:

2018-05-20 13:07:45.709 DEBUG 13739 --- [nio-8080-exec-1] c.zifeiy.demo.mapper.UserMapper.delete   : ==>  Preparing: DELETE FROM tb_user WHERE id=?
2018-05-20 13:07:45.761 DEBUG 13739 --- [nio-8080-exec-1] c.zifeiy.demo.mapper.UserMapper.delete   : ==> Parameters: 1(Integer)
2018-05-20 13:07:45.773 DEBUG 13739 --- [nio-8080-exec-1] c.zifeiy.demo.mapper.UserMapper.delete   : <==    Updates: 1

同时Redis中的缓存也会被相应地删除。

原文地址:https://www.cnblogs.com/zifeiy/p/9063183.html

时间: 2024-12-13 07:06:53

Spring Boot学习笔记——Spring Boot与Redis的集成的相关文章

Spring MVC 学习笔记 spring mvc Schema-based configuration

Spring mvc 目前支持5个tag,分别是 mvc:annotation-driven,mvc:interceptors,mvc:view-controller, mvc:resources和mvc:default-servlet-handlermvc:annotation-driven   注册 DefaultAnnotationHandlerMapping 和AnnotationMethodHandlerAdapter两个bean,及一系列缺省的messageconverter(需要c

Spring boot 学习笔记 (二)- 整合MyBatis

Spring boot 学习笔记 (二)- 整合MyBatis Spring Boot中整合MyBatis,并通过注解方式实现映射. 整合MyBatis 以Spring boot 学习笔记 (一)- Hello world 为基础项目,在pom.xml中添加如下依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter&l

Spring boot 学习笔记 - Hello world

Spring boot 学习笔记 - Hello world spring boot介绍: spring-boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. Hello world 通过官网https://start.spring.io/

Spring MVC 学习笔记(二):@RequestMapping用法详解

一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置 <servlet>     <servlet-name>servletName</servlet-name>     <servlet-class>ServletClass</servlet-class> </servlet>

Spring Batch学习笔记二

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It

[Spring MVC]学习笔记--DispatcherServlet

在上一篇我们介绍了Servlet,这一篇主要来看一下MVC中用到的DispatcherServlet(继承自HttpServlet). 1. DispatcherServlet在web.xml中被声明. <web-app> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet&l

Spring MVC学习笔记(一)--------准备篇

这一系列笔记将带你一步一步的进入Spring MVC,高手勿喷. 首先你得安装以下的工具: JDK,虽然JDK8已经发布了一段时间了,但是由于我们并不会使用到里面的新特性,所以JDK6以上版本皆可以(需加入到PATH环境变量中): Servlet Container,为了能运行WEB应用程序,因此需要一个Web Container,这里我们建议Tomcat即可: IDE,一个好的IDE不仅能提高你开发的效率,还能降低你学习的成本,我们选择的是IntelliJ: 构建工具,推荐使用Gradle,它

[转]Spring MVC 学习笔记 json格式的输入和输出

Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用 <!-- json --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-lgpl</artifactId> <version>1.8.1</version>

Spring Batch学习笔记三:JobRepository

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失:在这里我们推荐配置JobRepository去使用MySQL. 在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包