SpringCache的介绍和入门案例
文章目录
- 概述
- 常用注解
- 入门案例
概述
Spring Cache是Spring框架提供的一个缓存抽象层,用于在应用程序中实现缓存的功能。它通过在方法执行前检查缓存中是否已经存在所需数据,如果存在则直接返回缓存中的数据,如果不存在则执行方法体,将方法的返回值存储到缓存中,以便后续的请求可以直接从缓存中获取数据。
Spring Cache的主要特性如下:
-
声明式缓存:通过使用注解或XML配置的方式,可以很方便地将缓存逻辑应用到方法上。开发人员只需要在需要被缓存的方法上添加相应的注解,如@Cacheable、@CachePut等,Spring框架会自动处理缓存的读取和更新操作。
-
缓存注解支持:Spring Cache提供了多种缓存注解,包括@Cacheable、@CachePut、@CacheEvict等,用于标记具体的方法需要进行缓存的读取、更新和清除操作。通过这些注解,开发人员可以灵活地控制缓存的行为和策略。
-
多种缓存技术支持:Spring Cache支持多种常见的缓存技术,如Ehcache、Redis、Caffeine等。开发人员可以根据实际需求选择合适的缓存提供商,并通过简单的配置即可接入相应的缓存技术。
-
缓存管理器:Spring Cache提供了缓存管理器的抽象,可以统一管理和配置应用程序中的缓存。开发人员可以通过配置文件或编程方式定义缓存管理器的属性和行为,以满足不同环境和需求的缓存配置。
-
可扩展性: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作为缓存技术来实现方法级别的缓存功能了。当然,在实际项目中,你还可以根据需求进一步配置缓存管理器、缓存策略等。
相关文章:
SpringCache的介绍和入门案例
文章目录 概述常用注解入门案例 概述 Spring Cache是Spring框架提供的一个缓存抽象层,用于在应用程序中实现缓存的功能。它通过在方法执行前检查缓存中是否已经存在所需数据,如果存在则直接返回缓存中的数据,如果不存在则执行方法体…...
闪马智能又上榜!
近日,上海市经济和信息化委员会公布了2023年度上半年(第30批)市级企业技术中心拟认定企业名单。凭借在技术创新方面的突出成就,闪马智能上榜其中。 本次认定由上海市经济和信息化委员会组织开展,综合企业的地位和作用、…...
C++中的四种类型转换(Type Casting)方式
在C中,有四种常见的类型转换(Type Casting)方式,它们分别是: 一、静态转换(Static Cast): static_cast是最常见的类型转换方式,用于基本数据类型的转换、非多态类型之间…...
Linux系列:从0到1用Docker部署springboot项目
目录 1.前提条件 2.编写DockerFile镜像文件 3.打包SpringBoot项目 4.通过软件Xftp进行传输(*) 1.点击“文件-新建”编辑 5.操作远程主机 1.docker构建 2.容器运行 6.容器的关闭和删除 1.前提条件 Linux、docker、xftp的安装、一台可以访问的远…...
zabbix监控mysql数据库、nginx、Tomcat
文章目录 一.zabbix监控mysql数据库1.环境规划2.zabbix-server安装部署(192.168.198.17)3.zabbix-mysql安装部署(192.168.198.15)3.1 部署 zabbix 客户端3.2 服务端验证 zabbix-agent2 的连通性(192.168.198.17&#x…...
深入探索二叉树算法:理解、构建和应用C语言
引言 二叉树是计算机科学中的一种重要数据结构,它在各种算法和应用中都扮演着重要角色。本篇博客将带您深入探索二叉树的世界,从基本概念到高级应用,逐步展开二叉树的奥秘,助您更好地理解、构建和应用二叉树算法。 什么是二叉树…...
(css)点击前隐藏icon图表 点击后显示
(css)点击前隐藏icon图表 点击后显示 效果 html <liv-for"(item,index) in sessionList":key"index"class"liClass":class"{ active: change2 index }"tabindex"2">...<el-tooltip class"item" effec…...
Tomcat的动静分离以及多实例部署
一、动静分离 Nginx实现负载均衡的原理: Nginx实现负载均衡是通过反向代理实现Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。 但不是把所有的web请求转发,而是将静态页面请求Ncinx服务器自己来处…...
uniapp+vue3项目中使用vant-weapp
创建项目 通过vue-cli命令行创建项目 Vue3/Vite版要求 node 版本^14.18.0 || >16.0.0 uni-app官网 (dcloud.net.cn) npx degit dcloudio/uni-preset-vue#vite my-vue3-project打开项目 点击顶部菜单栏终端/新建终端 执行安装依赖指令 yarn install 或 npm install 安装vant…...
WordPress:实现发布文章自动添加TAG标签
在给我们的WordPress博客更新文章时,大多数人应该会给文章添加一些TAG标签,文章添加TAG标签也是我们做WordPress优化必不可少的一项,但是如果每一篇文章的关键字标签都要手动添加链接,那也太麻烦了。今天给大家分享一篇自动给文章…...
ubuntu下FFmpeg安装和使用以及CMakeLists.txt模板
sudo apt install ffmpeg sudo apt-get install libavfilter-devcmakelist模板 CMakeLists.txt cmake_minimum_required(VERSION 3.16) project(ffmpeg_demo)# 设置ffmpeg依赖库及头文件所在目录,并存进指定变量 set(ffmpeg_libs_DIR /usr/lib/x86_64-linux-gnu) …...
数据结构顺序表和链表(超详细)
线性表: 线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串 ... 线性表在逻辑上是线性结构,也就…...
free 查看 buff/cache 很大,处理方法
如果 free 命令输出中的 buff/cache 很大,这意味着系统将一部分内存用于缓存文件系统的数据。这是正常的行为,因为缓存可以提高文件访问的速度。然而,如果需要释放缓存来腾出内存空间,可以尝试以下方法: 清理 PageCach…...
【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?
云原生时代下的Java"拯救者" 在云原生时代,其实Java程序是有很大的劣势的,以最流行的spring boot/spring cloud微服务框架为例,启动一个已经优化好,很多bean需要lazy load的application至少需要3-4秒时间,内…...
DHCP的工作原理
DHCP是一种网络管理协议,全称为动态主机配置协议(Dynamic Host Configuration Protocol)。它是一种基于TCP/IP协议的网络服务,允许网络管理员集中管理和分配IP地址和其他网络配置参数,以便客户端设备能够使用这些参数与…...
display:flex;兼容浏览器写法
通过在 display 属性中使用这些不同的值,可以确保在各种浏览器中都能正确显示 flex 布局。 需要注意的是,这只是一个示例,实际使用时可能还需要考虑其他兼容性问题,并根据具体情况进行调整。如果你需要更全面的兼容性解决方案&am…...
三、python Django ORM postgresql[数据定时备份、数据恢复]
一、数据定时备份 解释:备份指定数据库,能有效在发生错误时,预防错误,进行恢复 1.基本备份 #!/bin/bash sudo -u postgres pg_dump -U postgres -d dbname -Fc > /home/postgres/backup/backup.dump # sudo -u postgres&…...
c++字符串函数
在 C 中有大量用于操作 C-style 字符串的函数,它们集成在头文件 <cstring> 中。其常见的函 函数作用strcpy(s1,s2) 复制字符串 s2 到 s1strcat(s1,s2) 将字符串 s2 连接到 s1 末尾strlen(s) 计算字符串 s 长度strcmp(s1,s2) 比较字符串 s1 和 s2 …...
使用OkHttp发送POST请求的几种方式
使用OkHttp发送POST请求的几种方式 介绍pom依赖基本的POST请求带授权的POST请求POST方式发送JSON数据Multipart POST 请求 介绍 本文将介绍 OkHttp 客户端的基本用法。 主要介绍 OkHttp 3.x 版本中发送Post请求的几种方式。 pom依赖 <dependency><groupId>com.sq…...
时序预测 | MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比
时序预测 | MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比 目录 时序预测 | MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 1.MATLAB实现EEMD-GRU、GRU时…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
