SpringCache的介绍和入门案例

文章目录

  • 概述
  • 常用注解
  • 入门案例

概述

Spring Cache是Spring框架提供的一个缓存抽象层,用于在应用程序中实现缓存的功能。它通过在方法执行前检查缓存中是否已经存在所需数据,如果存在则直接返回缓存中的数据,如果不存在则执行方法体,将方法的返回值存储到缓存中,以便后续的请求可以直接从缓存中获取数据。

Spring Cache的主要特性如下:

  1. 声明式缓存:通过使用注解或XML配置的方式,可以很方便地将缓存逻辑应用到方法上。开发人员只需要在需要被缓存的方法上添加相应的注解,如@Cacheable、@CachePut等,Spring框架会自动处理缓存的读取和更新操作。

  2. 缓存注解支持:Spring Cache提供了多种缓存注解,包括@Cacheable、@CachePut、@CacheEvict等,用于标记具体的方法需要进行缓存的读取、更新和清除操作。通过这些注解,开发人员可以灵活地控制缓存的行为和策略。

  3. 多种缓存技术支持:Spring Cache支持多种常见的缓存技术,如Ehcache、Redis、Caffeine等。开发人员可以根据实际需求选择合适的缓存提供商,并通过简单的配置即可接入相应的缓存技术。

  4. 缓存管理器:Spring Cache提供了缓存管理器的抽象,可以统一管理和配置应用程序中的缓存。开发人员可以通过配置文件或编程方式定义缓存管理器的属性和行为,以满足不同环境和需求的缓存配置。

  5. 可扩展性:Spring Cache具有良好的可扩展性,支持自定义缓存注解和缓存操作的实现。开发人员可以根据自己的需求扩展并定制Spring Cache的功能,以适应特定的业务场景。

使用Spring Cache可以有效地减少重复计算和数据库访问等耗时操作,提升系统的响应速度和性能。它提供了简单而强大的API和注解,使得开发人员能够更加轻松地实现缓存功能,并与Spring框架的其他模块无缝集成。

常用注解

在SpringCache中提供了很多缓存操作的注解,常见的是以下的几个:

注解说明
@EnableCaching开启缓存注解功能,通常加在启动类上
@Cacheable在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中
@CachePut将方法的返回值放到缓存中
@CacheEvict将一条或多条数据从缓存中删除

在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching开启缓存支持即可。

例如,使用Redis作为缓存技术,只需要导入Spring data Redis的maven坐标即可。

入门案例

下面是一个使用Redis作为缓存技术的Spring Cache入门案例:

首先,确保在项目的依赖中添加以下相关依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

接下来,你需要在Spring Boot的配置文件(如application.properties或application.yml)中添加Redis的连接信息,例如:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=

然后,你可以创建一个UserService接口,用于定义用户相关的服务方法:

public interface UserService {User getUserById(Long id);
}

接着,创建一个实现了UserService接口的UserServiceImpl类:

@Service
public class UserServiceImpl implements UserService {@Override@Cacheable(value = "users", key = "#id")public User getUserById(Long id) {// 模拟从数据库或其他数据源获取用户信息System.out.println("查询数据库获取用户信息,用户ID:" + id);return new User(id, "John Doe");}
}

在上述代码中,我们使用了@Cacheable(value = "users", key = "#id")注解来标记getUserById方法需要进行缓存。这里的"users"是缓存名称,表示将结果缓存到名为"users"的缓存中,key = "#id"表示缓存的key是方法的参数id。

最后,你可以编写一个简单的测试类来验证缓存的效果:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testGetUserById() {// 第一次调用,会执行方法内部的逻辑,从数据库中查询用户信息User user1 = userService.getUserById(1L);System.out.println(user1);// 第二次调用,应该从缓存中获取用户信息,不再执行方法内部的逻辑User user2 = userService.getUserById(1L);System.out.println(user2);}
}

在上述测试代码中,第一次调用getUserById方法时,会执行方法内部的逻辑,从数据库中查询用户信息。而第二次调用时,由于结果已经缓存在名为"users"的缓存中,所以直接从缓存中获取用户信息,不再执行方法内部的逻辑。

通过以上方式,我们就可以使用Redis作为缓存技术来实现方法级别的缓存功能了。当然,在实际项目中,你还可以根据需求进一步配置缓存管理器、缓存策略等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/35733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定义行业新标准?谷歌:折叠屏手机可承受20万次折叠

根据Patreon账户上的消息&#xff0c;Android专家Mishaal Rahman透露&#xff0c;谷歌计划推出新的硬件质量标准&#xff0c;以满足可折叠手机市场的需求。Android原始设备制造商&#xff08;OEM&#xff09;将需要完成谷歌提供的问卷调查&#xff0c;并提交样品设备进行严格审…

MySQL慢查询日志常用参数配置

慢查询日志 slow log&#xff1a;指query time减去lock time的时间&#xff0c;超过设置的阈值的查询SQL。 常用配置 #通用配置需配置在mysqld标签先&#xff0c;版本独有配置在mysqld-version标签下 [mysqld] #是否开启慢日志,Type:Boolean Default Value:OFF slow_log0/1…

基于 JMeter API 开发性能测试平台

目录 背景&#xff1a; 常用的 JMeter 类和功能的解释&#xff1a; JMeter 编写性能测试脚本的大致流程示意图&#xff1a; 源码实现方式&#xff1a; (1) 环境初始化 (2) 环境初始化 (3) 创建测试计划 (4) 创建 ThreadGroup (5) 创建循环控制器 (6) 创建 Sampler (…

【编码魔法师系列_六大原则5】迪米特原则(Law of Demeter Principle)

学会设计模式&#xff0c;你就可以像拥有魔法一样&#xff0c;在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们&#xff08;GoF&#xff09;凝聚出来的最佳实践&#xff0c;可以提高代码的可读性、可维护性和可重用性&#xff0c;从而让我们的开发效率更高。通…

每日一题——旋转数组的最小数字(II)

旋转数组的最小数字——II 题目链接 注&#xff1a;此题是昨天旋转数组的最小数字——I的拓展延伸&#xff0c;昨天题目数组的条件是不会存在重复元素&#xff0c;而本题数组的元素可以重复&#xff0c;因此建议先做前面一题&#xff0c;进行思考&#xff0c;这样求解这一题的…

【单片机毕业设计3-基于stm32c8t6的智能家居系统】

【单片机毕业设计3-基于stm32c8t6的智能家居系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇3 基于stm32的智能家居控制系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖&#xff08;有需可点击最后链接&a…

Python自动化测试框架:Pytest和Unittest的区别

pytest和unittest是Python中常用的两种测试框架&#xff0c;它们都可以用来编写和执行测试用例&#xff0c;但两者在很多方面都有所不同。本文将从不同的角度来论述这些区别&#xff0c;以帮助大家更好地理解pytest和unittest。 1. 原理 pytest是基于Python的assert语句和Pytho…

consul安装启动流程

普通软件包安装 首先cd /opt &#xff0c;将安装包放到该目录下 下载consul安装包 进入consul官网找到自己开发平台对应的安装包下载 https://www.consul.io/downloads.html 或使用命令 wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip (如果…

vue3 table动态合并,自定义参数合并单元格

<template><div><el-table :data"tableData" :span-method"objectSpanMethod" border:header-cell-style"{ textAlign: center}"><el-table-column prop"area" label"区域" align"center"&g…

HW样本《关于“XXXX”微信视频号发布短视频的信息说明.exe》的逆向分析

一、概述 样本运行后会释放《关于“XXXX”微信视频号发布短视频的信息说明.doc》并打开&#xff1b;同时释放ncloud.exe恶意文件并启动&#xff1b;调用cmd命令删除样本母体&#xff1b;其中ncloud.exe会从互联网下载类似字母表的数据解密出CS木马&#xff0c;在内存加载并运行…

《玩转Python数据分析专栏》大纲

欢迎来到《玩转Python数据分析分类专栏》&#xff01;在这个专栏中&#xff0c;我们将带您深入探索数据分析的世界&#xff0c;以Python为工具&#xff0c;解析各个领域的实际应用场景。通过100篇教程&#xff0c;我们将逐步引领您从入门级到高级&#xff0c;从基础知识到实战技…

前端安全:探秘安全 HTTP 头的设置

在当今数字化时代&#xff0c;前端安全至关重要。除了应对常见的攻击方式外&#xff0c;通过设置安全 HTTP 头&#xff0c;我们可以加强网站的安全性&#xff0c;减少潜在的威胁。本文将为您详细解释什么是安全 HTTP 头&#xff0c;以及如何通过设置它们来保护您的前端应用。 1…

真就逮住23届了使劲薅呗,24届笑了

作者&#xff1a;阿秀 InterviewGuide大厂面试真题网站&#xff1a;https://top.interviewguide.cn 小伙伴们大家好&#xff0c;我是阿秀。 最近在朋友圈看到不少动态说"24届明显好转"的消息&#xff0c;也收到不少私信问是不是24届的相比于23届好多了&#xff0c;更…

深度学习阶段性回顾

本文针对过去两周的深度学习理论做阶段性回顾&#xff0c;学习资料来自吴恩达老师的2021版deeplearning.ai课程&#xff0c;内容涵盖深度神经网络改善一直到ML策略的章节。视频链接如下&#xff1a;吴恩达深度学习视频链接 &#xff08;注&#xff1a;本文出自深度学习初学者&a…

Vue中如何更好地封装组件?

子组件接受父组件传递的事件 1.子组件使用事件名"$emit(父组件中传递的事件名,想给父组件传递的参数(可选))" click"$emit(click)" 2.子组件使用 v-on"$listeners" 父组件&#xff1a; <template><div id"app"><myCo…

MyBatis的XML映射文件

Mybatis的开发有两种方式&#xff1a; 注解 XML配置文件 通过XML配置文件的形式来配置SQL语句&#xff0c;这份儿XML配置文件在MyBatis当中也称为XML映射文件。 导学&#xff1a;在MyBatis当中如何来定义一份儿XML映射文件&#xff1f; 在MyBatis当中&#xff0c;定义XML…

使用 HTML、CSS 和 JavaScript 创建多步骤表单

使用 HTML、CSS 和 JavaScript 创建多步骤表单 为了处理又长又复杂的表单&#xff0c;我们需要将它们分成多个步骤。通过一次只在屏幕上显示一些输入&#xff0c;表单会感觉更容易理解&#xff0c;并防止用户感到被大量的表单字段淹没。 在本文中&#xff0c;我将逐步指导如何…

有哪些可能引起前端安全的问题?

跨站脚本 (Cross-Site Scripting, XSS) ⼀种代码注⼊⽅式,为了与 CSS 区分所以被称作 XSS。早期常⻅于⽹络论坛, 起因是⽹站没有对⽤户的输⼊进⾏严格的限制, 使得攻击者可以将脚本上传到帖⼦让其他⼈浏览到有恶意脚本的⻚⾯, 其注⼊⽅式很简单包括但不限于 JavaScript / CSS …

基础堆排序(Java 实例代码)

目录 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 四、Java 实例代码 src/runoob/heap/Heapify.java 文件代码&#xff1a; 基础堆排序 一、概念及其介绍 堆排序&#xff08;Heapsort&#xff09;是指利用堆这种数据结构所设计的一种排序算法。 堆是一个近…

Linux_5_Shell脚本编程

目录 1 基础1.1 程序组成1.2 程序编程风格1.3 编程语言1.4 编程逻辑处理方式 2 shell 脚本语言的基本结构2.1 shell脚本的用途2.2 shell脚本基本结构2.3 创建shell脚本过程2.4 脚本注释规范2.5 第一个脚本2.6 脚本调试2.7 变量2.7.1 变量2.7.2 变量类型2.7.3 编程语言分类2.7.4…