一.添加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中的缓存也会被相应地删除。

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

  1. Spring Cloud学习笔记--Spring Boot初次搭建

    1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...

  2. Spring Boot学习笔记——Spring Boot与MyBatis的集成(项目示例)

    1.准备数据库环境 # 创建数据库 CREATE DATABASE IF NOT EXISTS zifeiydb DEFAULT CHARSET utf8 COLLATE utf8_general_c ...

  3. [Spring入门学习笔记][Spring Boot]

    什么是Spring Boot Spring Boot正是在这样的一个背景下被抽象出来的开发框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...

  4. Spring Boot学习笔记---Spring Boot 基础及使用idea搭建项目

    最近一段时间一直在学习Spring Boot,刚进的一家公司也正好有用到这个技术.虽然一直在学习,但是还没有好好的总结,今天周末先简单总结一下基础知识,等有时间再慢慢学习总结吧. Spring Boo ...

  5. Spring Boot学习笔记——Spring Boot与ActiveMQ的集成

    Spring Boot对JMS(Java Message Service,Java消息服务)也提供了自动配置的支持,其主要支持的JMS实现有ActiveMQ.Artemis等.这里以ActiveMQ为 ...

  6. [spring入门学习笔记][spring的IoC原理]

    什么叫IoC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...

  7. [Spring入门学习笔记][Spring的AOP原理]

    AOP是什么? 面向切面编程 软件工程有一个基本原则叫做“关注点分离”(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年头互联网也 ...

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

    Spring mvc 目前支持5个tag,分别是 mvc:annotation-driven,mvc:interceptors,mvc:view-controller, mvc:resources和m ...

  9. 1.2(Spring MVC学习笔记) Spring MVC核心类及注解

    一.DispatcherServlet DispatcherServlet在程序中充当着前端控制器的作用,使用时只需在web.xml下配置即可. 配置格式如下: <?xml version=&q ...

随机推荐

  1. 高性能集群(HPC

    串行计算与并行计算1.串行计算串行计算是指在单个计算机(拥有单个中央独立单元) 上执行软件写操作.CPU 逐个使用一系列指令解决问题.为了加快处理速度,在原有的串行计算的基础上演变出并行计算2.并行计 ...

  2. 七、Linq To XML:XElement、XDocument

    一.概述 LINQ to XMLLINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework.NET Framework 编程语言中处理 XM ...

  3. vue1 监听数据变化

  4. Selenium3学习中遇到的问题

    pytesseract识别验证码 TesseractNotFoundError: tesseract is not installed or it's not in your path brew in ...

  5. Swagger2 模拟请求头

    前几天开发项目的时候,使用了Restful风格的接口.进行开发的时候,模拟请求头,带Token的时候遇到了一些问题.因为Api接口使用Swagger2进行搭建,所以找到了Swagger2 模拟head ...

  6. [Angular] Show a Loading Indicator for Lazy Routes in Angular

    We can easily code split and lazy load a route in Angular. However when the user then clicks that la ...

  7. ssh 免密码登录 单机和集群配置

    1.在主机上(A)生成密钥对 ssh-keygen -t rsa -P '' #在A主机上执行,生成密钥对 直接按enter键 执行以下命令,会在  ~/.ssh/ 目录生成 id_rsa  id_r ...

  8. javascript动态合并表格相同的单元格

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  9. PHP的输出语法

    一.echo 只能输出标量数据类型,对于任何数据都可以转为字符串输出 echo是PHP的一种特殊的'指令',不一定要像函数的那样()去使用,可以直接紧跟一个空格输出信息,可以是多个参数 <?ph ...

  10. GitLab获取人员参与项目-贡献项目列表

    目录 前言 获取token 登录 获取用户参与项目 完整代码 前言 最近在做的统计报表项目包含人员代码提交量. 要获取人员代码提交量首先要知道人员参与的项目.GitLab个人页面中有Contribut ...