【SpringBoot篇】使用Spring Cache高效处理缓存数据

文章目录

  • 🌹简述Spring Cache
  • 🏳️‍🌈常用注解
  • 🌺使用SpringCache
    • 🛸@Cacheable注解
      • ⭐测试
    • 🛸@CacheEvict
      • 🎍一次清理一条数据
      • 🎍一次删除多条数据

在这里插入图片描述
Spring Cache是一个框架,只要简单加一个注解,就能实现缓存功能。Spring Cache是Spring Framework提供的一个模块,它为应用程序添加了缓存支持。通过使用Spring Cache,你可以在方法级别上定义缓存规则,将方法的返回结果缓存起来,以提高方法调用的性能和响应速度。

🌹简述Spring Cache

是一个框架,只要简单加一个注解,就能实现缓存功能
Spring Cache 是 Spring Framework 提供的一个模块,它为应用程序添加了缓存支持。通过使用 Spring Cache,你可以在方法级别上定义缓存规则,将方法的返回结果缓存起来,以提高方法调用的性能和响应速度。

Spring Cache 的主要特点和功能包括:

注解驱动:Spring Cache 基于注解,通过在方法上添加 @Cacheable、@CachePut、@CacheEvict 等注解,来定义缓存规则和行为。

支持多种缓存实现:Spring Cache 支持多种常见的缓存实现,包括 Ehcache、Redis、Caffeine、ConcurrentMap 等,你可以根据自己的需求选择合适的缓存提供者。

灵活的缓存配置:你可以通过配置文件或者 Java 代码来灵活地配置缓存管理器、缓存的过期时间、缓存的键生成策略等。

支持条件化的缓存操作:除了基本的缓存注解外,Spring Cache 还支持条件化的缓存操作,比如通过 SpEL 表达式来定义条件,决定是否执行缓存操作。

总之,Spring Cache 提供了一种便捷的方式来实现方法级别的缓存,使得开发者可以专注于业务逻辑的实现,而不必过多关注缓存的管理和维护。这样可以有效地提升应用程序的性能,并减少对底层缓存实现的耦合。

🏳️‍🌈常用注解

请添加图片描述

@Cacheable:触发将方法返回结果缓存。
@CacheEvict:触发从缓存中清除一条或多条数据。
@CachePut:触发将方法返回结果更新到缓存。
@Caching:组合多个缓存注解在一个方法上。
@CacheConfig:在类级别共享缓存注解的通用配置。

🌺使用SpringCache

使用SpringCache需要把下面的代码导入到pom文件中

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId><version>2.7.3</version></dependency>

这样子我们就可以使用SpringCache了

我们打开下面链接里面的文件,我们下面要使用文件中的代码进行讲解
我用夸克网盘分享了「springcache-demo.zip」,点击链接即可保存。打开「夸克APP」 链接:https://pan.quark.cn/s/571a45c464d6

我们首先来启动Redis服务
在这里插入图片描述

CacheDemoApplication.java

在启动类上加上这个注解,开启缓存注解功能

@EnableCaching

在这里插入图片描述

🛸@Cacheable注解

进入controller包
UserController.java

加入下面的注解

@CachePut

插入数据的同时,我们还需要把数据保存到Redis中一份
在这里插入图片描述

⭐测试

我们启动项目,输入http://localhost:8888/doc.html打开接口文档进行测试
在这里插入图片描述
发现发送成功,我们去查看数据库,发现数据库已经插入了一条数据了

我们打开Redis Desktop Manager,连接成功后,发送数据
发现

user5对象已经进行了序列化
请添加图片描述

🛸@CacheEvict

🎍一次清理一条数据

如果我们把数据库中的数据给删除掉了,那么对应的缓存数据我们也应该删除,下面我们就来使用@CacheEvict注解来删除缓存数据
我们加上这一段代码

@CacheEvict(cacheNames = "userCache",key = "#id")

然后启动项目
在这里插入图片描述
输入http://localhost:8888/doc.html打开接口文档进行测试

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

查询数据库,发现数据库里面对应id=2的字段被删除了
Redis缓存也删除了

🎍一次删除多条数据

我们在deleteAll这个方法中进行操作
仍然加上@CacheEvict注解

@CacheEvict(cacheNames = "userCache",allEntries = true)

在这里插入图片描述
使用接口文档http://localhost:8888/doc.html发送数据,就可以删除所有缓存了

本文介绍了Spring Cache的常用注解及示例,让大家快速上手Spring Cache的使用。Spring Cache是一个非常强大的缓存框架,能够通过简单的注解就实现缓存,大大简化了我们的开发工作。希望本文对大家有所帮助,如果还有疑问,欢迎在评论区交流。

在这里插入图片描述

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

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

相关文章

宠物网站的技术 SEO:完整指南

您是宠物行业网站的从业者吗&#xff1f;那么您一定知道&#xff0c;当人们寻找与宠物相关的资源时&#xff0c;在搜索引擎结果中排名靠前有多么重要。 这就是技术SEO的用武之地&#xff01;它正在调整您网站的后端代码和服务器配置&#xff0c;以在 SERP 中排名更高。 在此&…

redis的集群,主从复制,哨兵

redis的高可用 在Redis中&#xff0c;实现高可用的技术主要包括持久化、主从复制、哨兵和集群&#xff0c;下面分别说明它们的作用&#xff0c;以及解决了什么样的问题。 持久化&#xff1a; 持久化是最简单的高可用方法&#xff08;有时甚至不被归为高可用的手段&#xff09;…

splice()方法

splice(index,len,item)是vue中数组变异的方法之一&#xff0c;可以用来删除&#xff0c;更新&#xff0c;和增加数组内容参数: index&#xff1a;数组下标 len&#xff1a;替换/删除的长度 item&#xff1a;更新或增加的内容使用方法&#xff1a; 1、删除&#xff0c;当参数形…

SQL优化的总结

1. 编写高效的 SQL 语句 1.1 合理使用索引 - **索引类型&#xff1a;** 解释不同类型的索引&#xff08;B-Tree、哈希索引等&#xff09;的作用和适用场景。 - **选择和创建索引&#xff1a;** 根据查询需求和数据分布选择合适的列创建索引&#xff0c;避免过多或不必要的索…

2019年9月26日: Go生态洞察:发布Go模块

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

如何保护 API 安全

为了收集有关 API 管理当前和未来状态的见解&#xff0c;我们邀请来自 18 家公司的 IT 专业人士分享他们的想法。我们问他们&#xff1a;“哪些技术和工具对于保护 API 最有效&#xff1f;” 他们告诉我们的是&#xff1a; 验证 我们经常向已知的 B2B 合作伙伴提供 API 访问权…

JavaScript创建枚举

相比直接写数字与字符串值&#xff0c;用枚举表示预定义范围的常量值有很多优点&#xff0c;这里就不做赘述了&#xff0c;但目前为止javascript并没有提供原生的enum类型&#xff08;typescript当然就支持&#xff09;&#xff0c;通常javascript会借助对象类型来等效实现enum…

lightdb substr函数支持浮点类型

背景 在信创适配中&#xff0c;从ORACLE迁移过来的程序使用了substr函数。 LightDB 23.4版本对该函数进行了增强。支持位置参数和长度参数使用number类型。 示例 使用substr(text, numeric, numeric)函数 declareline varchar(300) : 312456789009876543001000.00;acct va…

mac解压gz文件

我发现一个问题&#xff0c;比如我从GSE144136里下载的文件 这个结果是这样的&#xff0c;直接双击是没有用的 因此需要使用命令行 gzip -d GSE144136_GeneNames.csv.gz

猜数字游戏

需求目标 这个游戏窗口要求玩家猜一个1到100之间的数字。玩家可以在文本框中输入自己的猜测&#xff0c;并点击提交按钮进行验证。游戏会给出相应的提示&#xff0c;直到玩家猜中正确的数字为止。 效果 源码 /*** author lwh* date 2023/11/28* description 猜数字游戏**/ i…

基于springboot房地产项目设计流程管理系统

一、需求描述 该项目针对某房地产效果图公司的项目流程进行信息化管理。其目标是使得该公司的管理人员、普通员工、前台、能够对项目、员工&#xff08;包括主管&#xff09;、财务、工作业绩以及客户进行全方位的管理&#xff0c;并在此基础上能够挖掘员工潜力&#xff0c;能够…

C语言——输入 10 个数,分别统计其中正数、负数、零的个数

#include <stdio.h> int main() {int numbers[10]; // 存储输入的10个数int positive_count 0; // 正数计数器int negative_count 0; // 负数计数器int zero_count 0; // 零计数器// 输入10个数printf("请输入10个数&#xff1a;\n");for (int i 0; i …

AMP State Evolution的计算:以伯努利-高斯先验为例

AMP State Evolution (SE)的计算 t 1 t1 t1时&#xff0c; E ( t ) E [ X 2 ] \mathcal E^{(t)} \mathbb E [X^2] E(t)E[X2]&#xff0c;SE的迭代式为 τ r ( t ) σ 2 1 δ E ( t ) E ( t 1 ) E ∣ η ( t ) ( X Z ) − X ∣ 2 , Z ∼ N ( 0 , τ r ( t ) ) \begin{a…

HarmonyOS应用开发者基础认证考试(90分过)

此博文为HarmonyOS应用开发者基础认证考试的最后的大考&#xff0c;要求100分取得90分方可获取证书、现将考试的题库进行分享&#xff0c;希望能帮到大家。但是需要注意的是&#xff0c;题库会不定时的进行题目删减&#xff0c;但是大概的内容是不会进行改变的。真心希望这篇博…

历时三个月,我发布了一款领取外卖红包小程序

近几年&#xff0c;推广外卖红包爆火&#xff0c;各种推广外卖红包的公众号层出不穷。于是&#xff0c;我就在想外卖红包究竟是怎么一回事。就这样&#xff0c;我带着问题开始了关于外卖红包的研究。 在研究的过程中&#xff0c;我开始了解隐藏优惠券、cps等一系列相关的术语。…

9个AI视频后期处理神器——Runway 全功能超详细使用教程(3)

前面2期内容&#xff0c;主要给大家重点介绍了Runway视频生成技术的核心产品功能板块Gen1、Gen2、FI使用教程&#xff0c;还没有看过的小伙伴可以回看往期文章。除了视频生成AI技术外&#xff0c;Runway还具有图片、视频后期处理30多项单个功能&#xff0c;例如视频修复、视频主…

用Elasticsearch搜索匹配功能实现基于地理位置的查询

1.Redis,MongoDB,Elasticsearch实现地理位置查询比较 1.1 Redis: 优点&#xff1a;Redis提供了地理空间索引功能&#xff0c;可以通过Geo数据类型进行地理位置查询。这使得Redis在处理地理位置查询时非常高效。 缺点&#xff1a; Redis的地理空间索引功能相对简单&#xff0…

融云筑基,移动云加速构建高性能智能算力底座

自2022年11月以来&#xff0c;全球大模型数量迅速增加&#xff0c;以ChatGPT为代表的大模型已经成为世界数字科技领域新热点。大模型带来的算力需求迅速增长&#xff0c;未来智算场景将会有非常大的突破空间。 在“十四五”规划的指引下&#xff0c;各地政府积极投入智算中心建…

深度学习-yolo目标检测-机器学习-计算机视觉-python学习路线(呕心沥血出品-绝对精品-附资源链接)

学习路线 1. 计算机视觉基础知识 图像处理基础:了解图像的基本处理技术,如滤波、边缘检测、直方图等。数字图像处理:熟悉数字图像的表示、颜色模型、图像增强等基本概念。opencv课程链接:Python for Computer Vision with OpenCV and Deep Learning资料推荐: 书籍:《数字…

内核延时函数sleep和delay

延时函数 linux 驱动开发过程中&#xff0c;经常会用到延迟函数&#xff1a;udelay&#xff0c;mdelay&#xff0c;usleep&#xff0c;msleep&#xff0c;usleep_range。这几个延时函数优先使用usleep_range其次是usleep最后udelay。 1、delay和sleep的区别 delay&#xff0…