返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot与Spring中数据缓存Cache超详细讲解
  • 791
分享到

SpringBoot与Spring中数据缓存Cache超详细讲解

SpringBoot数据缓存CacheSpring数据缓存CacheSpringBootCache 2022-11-13 19:11:16 791人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、spring缓存支持1、@Cacheable2、@CacheEvict3、@CachePut4、Caching5、CacheConfig二、Spring Boot缓存支持一、

一、Spring缓存支持

Spring框架定义了org.springframework.cache CacheManager和org.springframework.cache.Cache接口来统一不同的缓存技术

CacheManager常用方法如下

1、@Cacheable

该注解可以标记在一个方法上,也可以标记在一个类上,当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,在方法执行前,Spring先检查缓存中是否存在方法返回的数据,如果存在则直接返回缓存数据,如果不存在,则调用方法并将方法返回值存入缓存

2、@CacheEvict

该注解用来标注在需要清楚缓存元素的方法或类上,当标记在一个类上时,表示其中所有方法的执行都会触发缓存的清除操作

3、@CachePut

该注解也可以声明一个方法支持缓存功能

4、Caching

该注解可以在一个方法或类上同时指定多个Spring Cache相关的注解

5、CacheConfig

该注解作用在类上可以设置当前缓存的一些公共设置

二、Spring Boot缓存支持

1:创建基于spring-voot-starter-cache 和spring-boot-starter-data-jpa依赖的Spring BootWEB应用

2:配置application.properties文件 代码如下

server.servlet.context-path=/ch6_10
###
##数据源信息配置
###
#数据库地址
spring.datasource.url=jdbc:Mysql://localhost:3306/SpringBootjpa?characterEncoding=utf8
#数据库用户名
spring.datasource.username=root
#数据库密码
spring.datasource.passWord=root
#数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
####
#JPA持久化配置
####
#指定数据库类型
spring.jpa.database=MYsql
#指定是否在日志中显示SQL语句
spring.jpa.show-sql=true
#指定自动创建、更新数据库表等配置,update表示如果数据库中存在持久化类对应的表就不创建,不存在就创建对应的表
spring.jpa.hibernate.ddl-auto=update
#让控制器输出的JSON字符串格式更美观
spring.jackson.serialization.indent-output=true 

3:修改pom.xml文件 添加mysql依赖

<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="Http://Maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
-<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>com.ch</groupId>
<artifactId>ch6_10</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ch6_10</name>
<description>Demo project for Spring Boot</description>
-<properties>
<java.version>11</java.version>
</properties>
-<dependencies>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 添加MySQL依赖 -->
-<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
<!-- MySQL8.x时,请使用8.x的连接器 -->
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
-<build>
-<plugins>
-<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

4:创建持久化实体类

代码如下

package com.ch.ch6_10.entity;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.jsonIgnoreProperties;
@Entity
@Table(name = "student_table")
@JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
public class Student implements Serializable{
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;//主键
	private String sno;
	private String sname;
	private String ssex;
	public Student() {
		super();
	}
	public Student(int id, String sno, String sname, String ssex) {
		super();
		this.id = id;
		this.sno = sno;
		this.sname = sname;
		this.ssex = ssex;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getSno() {
		return sno;
	}
	public void setSno(String sno) {
		this.sno = sno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public String getSsex() {
		return ssex;
	}
	public void setSsex(String ssex) {
		this.ssex = ssex;
	}  
}

5:创建数据访问接口

package com.ch.ch6_10.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.ch.ch6_10.entity.Student;
public interface StudentRepository extends JpaRepository<Student, Integer>{
}

6:创建业务层 包括一个接口和一个实现类

接口代码如下

package com.ch.ch6_10.service;
import com.ch.ch6_10.entity.Student;
public interface StudentService {
	public Student saveStudent(Student student);
	public void deleteCache(Student student);
	public Student selectOneStudent(Integer id);
}

实现类代码如下

package com.ch.ch6_10.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.ch.ch6_10.entity.Student;
import com.ch.ch6_10.repository.StudentRepository;
@Service
public class StudentServiceImpl implements StudentService{
	@Autowired
	private StudentRepository studentRepository;
	@Override
	@CachePut(value = "student", key="#student.id")
	public Student saveStudent(Student student) {
		Student s = studentRepository.save(student);
		System.out.println("为key=" + student.getId() + "数据做了缓存");
		return s;
	}
	@Override
	@CacheEvict(value = "student", key="#student.id")
	public void deleteCache(Student student) {
		System.out.println("删除了key=" + student.getId() + "的数据缓存");
	}
	@Override
	@Cacheable(value = "student")
	public Student selectOneStudent(Integer id) {
		Student s = studentRepository.getOne(id);
		System.out.println("为key=" + id + "数据做了缓存");
		return s;
	}
}

7:创建控制器层

package com.ch.ch6_10.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ch.ch6_10.entity.Student;
import com.ch.ch6_10.service.StudentService;
@RestController
public class TestCacheController {
	@Autowired
	private StudentService studentService;
	@RequestMapping("/savePut")
	public Student save(Student student) {
		return studentService.saveStudent(student);
	}
	@RequestMapping("/selectAble")
	public Student select(Integer id) {
		return studentService.selectOneStudent(id);
	}
	@RequestMapping("/deleteEvict")
	public String deleteCache(Student student) {
		studentService.deleteCache(student);
		return "ok";
	}
}

8:在主类中开启缓存支持

package com.ch.ch6_10;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@EnableCaching
@SpringBootApplication
public class Ch610Application {
	public static void main(String[] args) {
		SpringApplication.run(Ch610Application.class, args);
	}
}

到此这篇关于SpringBoot与Spring中数据缓存Cache超详细讲解的文章就介绍到这了,更多相关SpringBoot数据缓存Cache内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot与Spring中数据缓存Cache超详细讲解

本文链接: https://lsjlt.com/news/170328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot与Spring中数据缓存Cache超详细讲解
    目录一、Spring缓存支持1、@Cacheable2、@CacheEvict3、@CachePut4、Caching5、CacheConfig二、Spring Boot缓存支持一、...
    99+
    2022-11-13
    SpringBoot数据缓存Cache Spring数据缓存Cache SpringBoot Cache
  • Redis缓存实例超详细讲解
    目录1 前言1.1 什么是缓存1.2 缓存的作用及成本1.3 Redis缓存模型2 给商户信息添加缓存3 缓存更新策略3.1 更新策略介绍3.2 主动更新策略3.3 主动更新策略练习4 缓存穿透及其解决方案4.1 缓存穿...
    99+
    2022-12-07
    Redis缓存策略 Redis缓存机制 Redis缓存
  • Redis缓存策略超详细讲解
    目录Redis缓存中间件缓存是什么缓存的优点缓存的缺点Redis缓存已查询数据redis缓存中间件实践缓存更新缓存更新的三个策略主动更新策略的三种方案主动更新的代码实现Redis缓存...
    99+
    2024-04-02
  • Spring超详细讲解IOC与解耦合
    目录前言一.所谓耦合二.Spring三.核心IOC理解1.容器2.控制反转3.依赖注入四.Bean的实例化1.无参构造2.工厂静态方法3.工厂实例方法(常用)五.Bean的依赖注入1...
    99+
    2022-11-13
    Spring IOC Spring 解耦合
  • SpringBoot超详细讲解多数据源集成
    目录一、多数据源使用场景与弊端1.场景2.弊端二、使用步骤1.引入库2.多数据源配置文件3.多数据源配置类4.使用总结一、多数据源使用场景与弊端 1.场景 业务系统跨数据库数据转存(...
    99+
    2024-04-02
  • SpringBoot详解整合Spring Cache实现Redis缓存流程
    目录1、简介2、常用注解2.1、@EnableCaching2.2、@Cacheable2.3、@CachePut2.4、@CacheEvict3、使用Redis当作缓存产品3.1、...
    99+
    2024-04-02
  • Spring核心之IOC与bean超详细讲解
    目录前言一、Spring的简介和获取二、依赖注入与IOC1、接口注入2、Setter注入3、构造器注入三、自动装配1、按Bean名称装配2、按bean类型装配四、bean的作用域1、...
    99+
    2022-11-13
    Spring IOC Spring bean
  • PHP之深入学习Yii2缓存Cache组件详细讲解
    什么是缓存组件Cache 缓存是提升 Web 应用性能简便有效的方式。 通过将相对静态的数据存储到缓存并在收到请求时取回缓存, 应用程序便节省了每次重新生成这些数据所需的时间。 定...
    99+
    2024-04-02
  • 超详细讲解SpringBoot参数校验实例
    目录使用传统方式的弊端引入依赖注解说明一、对实体类进行校验1、entity2、controller3、编写全局统一异常处理二、针对单个参数进行校验三、分组校验1、entity2、co...
    99+
    2024-04-02
  • JavaSpringMVC数据响应超详细讲解
    目录1)页面跳转  2)回写数据3)配置注解驱动4)知识要点1)页面跳转   直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。  返回带有前缀的字符串: 转...
    99+
    2024-04-02
  • Spring项目中使用Cache Redis实现数据缓存
    目录Spring项目中实现数据缓存一、Spring Cache + Redis 介绍二、项目中集成1. 引入依赖2. 添加 redis 配置类3. 配置文件增加 redis 配置4....
    99+
    2024-04-02
  • C语言数据的存储超详细讲解中篇练习
    目录前言数据的存储的知识点练习练习 1练习 2练习 3练习 4练习 5练习 6练习 7总结前言 本文继续学习数据在内存中存储的相关知识点。 数据存储整型提升 数据的存储的知识点练习 ...
    99+
    2024-04-02
  • C语言数据的存储超详细讲解上篇
    目录前言1、数据类型介绍类型的基本归类2、整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍2.2.1 什么是大小端2.2.2 大端和小端意义2.2.3 写程序判断字节序总...
    99+
    2024-04-02
  • java、spring、springboot中整合Redis的详细讲解
    目录java整合Redis1、引入依赖或者导入jar包2、代码实现Spring整合Redis1、添加依赖2、redis配置文件3、注入模板对象springboot整合Redis1、添...
    99+
    2024-04-02
  • SpringMVCJSON数据传输参数超详细讲解
    目录一、JSON普通数组二、JSON对象数据三、JSON对象数组前面我们说过,现在比较流行的开发方式为异步调用。前后台以异步方式进行交换,传输的数据使用的是==JSON==,所以前端...
    99+
    2023-02-07
    SpringMVC JSON数据传输参数 SpringMVC数据传输 SpringMVC JSON数据传输
  • C语言可变参数与内存管理超详细讲解
    目录概述动态分配内存重新调整内存的大小和释放内存概述 有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数。C 语言为这种情况提供了一个解决方案,它允许...
    99+
    2023-01-02
    C语言可变参数 C语言内存管理
  • C++ 数据结构超详细讲解顺序表
    目录前言一、顺序表是什么概念及结构二、顺序表的实现顺序表的缺点几道练手题总结(●’◡’●) 前言 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种...
    99+
    2024-04-02
  • C++ 数据结构超详细讲解单链表
    目录前言一、链表是什么链表的分类二、链表的实现总结(❁´◡`❁) 单链表 前言 上篇顺序表结尾了解了顺序表的诸多缺点,链表的特性很好的解决了这些问题,本期我们来认识单链表...
    99+
    2024-04-02
  • Java超详细讲解数据结构的应用
    目录一.bfs二.双端队列三.算法题1.kotori和迷宫2.小红找红点3.小红玩数组 一.bfs bfs(广度优先搜索),类似二叉树的层序遍历,利用队列完成。一般用于求最短路。 图...
    99+
    2024-04-02
  • SpringBoot超详细讲解集成Flink的部署与打包方法
    目录一、SpringBoot集成Flink二、FlinkTask写法调整三、打包插件四、Flink的上传与运行总结一、SpringBoot集成Flink 其实没什么特别的,就把Fli...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作