Spring Cache简单使用

Spring Cache是一个框架,实现了基于注解的缓存功能。只需要简单地加一个注解,就能实现缓存功能

Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,例如:

1.EHCahce
2.Chffeine
3.Redis

需要导入的maven坐标

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

Spring Cache的常用注解

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

第一步 先开启注解缓存 @EnableCaching

@Slf4j
@SpringBootApplication
@EnableCaching
public class CacheDemoApplication {public static void main(String[] args) {SpringApplication.run(CacheDemoApplication.class,args);log.info("项目启动成功...");}
}

第二步 使用将数据加入缓存注解 @CachePut()

@PostMapping
//如果使用Spring Cache缓存数据,key的生成:"cacheName::key"-->"userCache::2"
@CachePut(cacheNames = "userCache",key = "#user.id")//根据形参名对应获取key
//有多种写法
//@CachePut(cacheNames = "userCache",key = "#result.id")//返回值对应
//@CachePut(cacheNames = "userCache",key = "#p0.id")//根据第几个形参对应,p0第一个形参,p2、p3
//@CachePut(cacheNames = "userCache",key = "#a0.id")//也是一样
//@CachePut(cacheNames = "userCache",key = "#root.args[0].id")//也是一样
public User save(@RequestBody User user){userMapper.insert(user);return user;
}

具体解释看注解的源码注释

/*** Spring Expression Language (SpEL) expression for computing the key dynamically.* <p>Default is {@code ""}, meaning all method parameters are considered as a key,* unless a custom {@link #keyGenerator} has been set.* <p>The SpEL expression evaluates against a dedicated context that provides the* following meta-data:* <ul>* <li>{@code #result} for a reference to the result of the method invocation. For* supported wrappers such as {@code Optional}, {@code #result} refers to the actual* object, not the wrapper</li>* <li>{@code #root.method}, {@code #root.target}, and {@code #root.caches} for* references to the {@link java.lang.reflect.Method method}, target object, and* affected cache(s) respectively.</li>* <li>Shortcuts for the method name ({@code #root.methodName}) and target class* ({@code #root.targetClass}) are also available.* <li>Method arguments can be accessed by index. For instance the second argument* can be accessed via {@code #root.args[1]}, {@code #p1} or {@code #a1}. Arguments* can also be accessed by name if that information is available.</li>* </ul>*/
String key() default "";

在这里插入图片描述

第三步 使用从缓存中获取数据的注解 @Cacheable()

@GetMapping
//拼接key之后从缓存中获取,有则直接返回,没有的话就会通过反射执行这个方法获取数据,并且加入到缓存中
@Cacheable(cacheNames = "userCache",key = "#id")
public User getById(Long id){User user = userMapper.getById(id);return user;
}

此时,执行查询操作会直接先去redis中查,查得到就直接返回;查不到再执行方法,然后再将返回结果缓存到redis中,因为key都是一样的嘛

第四步 使用清理缓存数据的注解删除指定缓存数据 @CacheEvict

@DeleteMapping
//根据key清理缓存数据
@CacheEvict(cacheNames = "userCache",key = "#id")
public void deleteById(Long id){userMapper.deleteById(id);
}

此时,执行删除操作就会删除对应数据库数据,同时删除redis对应的缓存数据

第五步 使用上面的注解删除所有缓存数据 @CacheEvict + allEntries = true

@DeleteMapping("/delAll")
//allEntries = true:删除cacheNames下的所有键值对,也就是所有缓存数据
@CacheEvict(cacheNames = "userCache",allEntries = true)
public void deleteAll(){userMapper.deleteAll();
}

此时,执行删除操作就会删除对应数据库,同时删除redis所有缓存数据

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Delphi Web前端开发教程(9):基于TMS WEB Core框架

3、REST Servers服务端(后端)框架 REST服务端特点&#xff1a; – 为远程资源提供一个REST API接口。也可以为其他网络内容提供服务&#xff1b; – 包括在Delphi Enterprise & Architect企业版和架构师版中的RAD服务器、DataSnap、WebBroker&#xff1b; – 开源框架&a…

vue+mars3d点击图层展示炫酷的popup弹窗

展示效果 目录 一&#xff1a;叠加数据图层到地图上&#xff0c;此时需要使用bindPopup绑定popup 二、封装自定义的popup&#xff0c;样式可以自行调整 一&#xff1a;叠加数据图层到地图上&#xff0c;此时需要使用bindPopup绑定popup 这里我根据数据不同&#xff0c;展示的…

【机器人学】3-1.六自由度机器人速度域-雅克比矩阵【附MATLAB代码】

MATLAB仿真验证 已知六轴机器人的D-H参数如下所示&#xff1a; 关节1关节2关节3关节4关节5关节609000-9090a0042539300d160.700113.39993.60900-9000000000 通过D-H参数&#xff0c;选用改进型的D-H参数&#xff0c;可以得到各个关节间的旋转矩阵。详细请看我的第一篇博客六自…

基于SSM的网上拍卖系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、卖家、买家功能模块&#xff1a;用户管理、卖家管理、公告管理、竞拍物品管理、预约竞拍管理、竞拍管理等技术选型&#xff1a;SSM&#xff0c;jsp等测试环境&#xff1a;idea2024&#xff0c;jdk1.8&#xff0c;tomcat8&#xff0c;n…

Vue3安装 运行教程

本文是综合了所有vue安装教程而成 更细化 更简略 希望对各位读者有所帮助&#xff01; Vue安装 1. Vue-cli脚手架安装 安装vue的方式有很多 我们这里选择npm方式安装vue npm方式 npm方式安装vue&#xff0c;详细介绍见下文。 1.node.js安装和配置 安装npm 需要安装note.js&…

帝可得-设备管理

设备管理 需求说明 点位管理主要涉及到三个功能模块&#xff0c;业务流程如下&#xff1a; 新增设备类型: 允许管理员定义新的售货机型号&#xff0c;包括其规格和容量。新增设备: 在新的设备类型定义后&#xff0c;系统应允许添加新的售货机实例&#xff0c;并将它们分配到特…

w070基于springboot的大创管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…

FlyHttp 的最佳实践:加速项目级 API 请求构建

FlyHttp的相关文章&#xff1a; FlyHttp 的诞生&#xff1a;从认识各种网络请求开始 FlyHttp 的设计思想&#xff1a;前端 API 自动化构建工具 FlyHttp 的使用&#xff1a;如何高效使用 FlyHttp&#xff0c;支持 JS、TS 项目 一. FlyHttp 是什么&#xff1f; 这是一个自动…

七次课掌握 Photoshop:样式与滤镜

Photoshop 中的图层样式和滤镜功能&#xff0c;能够为图像添加丰富的效果和质感&#xff0c;使图像更加生动和富有创意。熟练掌握这些工具和方法&#xff0c;可以大大提升作品的视觉表现力。 一、图层样式 图层样式 Layer Styles是应用于图层或图层组的特效&#xff0c;如投影、…

ML23_变分推理Variational inference

可以先看第一期https://blog.csdn.net/qq_51605551/article/details/141901941 变分推理&#xff08;Variational Inference, VI&#xff09;是一种用于近似贝叶斯推断的方法&#xff0c;它在处理复杂的概率模型时特别有用。贝叶斯推断的核心是计算后验分布&#xff0c;即在给…

Map和Set(下)

我们先对上一小节部分进行一些复习和补充 1. 补充和强调 补充 1. HashMap 和 HashSet 即 java 中利用哈希表实现的 Map 和 Set 2. java 中使用的是哈希桶方式解决冲突的 3. java 会在冲突链表长度大于一定阈值后&#xff0c;将链表转变为搜索树&#xff08;红黑树&#xff09;条…

StackWalker 遍历栈帧

StackWalker 遍历栈帧 背景StackWalkerStackFrameOption方法创建 StackWalkerwalk例&#xff1a;打印所有信息例&#xff1a;打印反射帧、隐藏帧 forEachgetCallerClass例&#xff1a;直接调用、反射调用例&#xff1a;栈底调用会抛异常 参考 背景 在看 springboot 3.x 源码时…

捷联惯导原理和算法预备知识

原理和算法预备知识 牛顿第一运动定律-惯性定律&#xff1a;如一物体不受外力作用&#xff0c;它将保持静止状态或匀速直线运动状态不变。 牛顿第二运动定律&#xff1a;表达式为Fma,。其中F为物体所受的合力&#xff0c;m为物体的质量&#xff0c;a为物体的加速度。这个公式…

便捷工具--ssh登录ubuntu

一、概述 由于ubuntu终端的使用会有诸多不便捷的地方&#xff0c;建议使用mobaterm、xshell、SecureCRT等软件&#xff0c;通过ssh方式&#xff0c;操作虚拟机的ubuntu系统。 1、ssh的安装 sudo apt install openssh-server2、查看ubuntu的ip 3、ssh端登录 ssh链接linux端的…

【白盒测试】单元测试的理论基础及用例设计技术(6种)详解

目录 &#x1f31e;前言 &#x1f3de;️1. 单元测试的理论基础 &#x1f30a;1.1 单元测试是什么 &#x1f30a;1.2 单元测试的好处 &#x1f30a;1.3 单元测试的要求 &#x1f30a;1.4 测试框架-Junit4的介绍 &#x1f30a;1.5 单元测试为什么要mock &#x1f3de;️…

【案例分享】高性能AI边缘计算赋能车端真值系统​

近年来&#xff0c;智能驾驶行业正在蓬勃发展&#xff0c;对于研发完成的智能驾驶车辆&#xff0c;需要对其进行全方面的测试才能商用量产&#xff0c;以确保用户的人身财产安全。将测试车辆直接进行实际道路测试将面临安全性&#xff0c;经济性&#xff0c;场地可靠性&#xf…

【docker】11. 容器实战案例

综合实战一&#xff1a;Mysql 容器化安装 进入 mysql 的镜像网站&#xff0c;查找 mysql 的镜像 mysql docker hub 官网 可以看到有这么多的 tag 我们选择使用最多的 5.7 版本&#xff0c;拉取镜像 root139-159-150-152:/data/myworkdir/container# docker pull mysql:5.7 5.…

全新图文对、视频文本对数据集,高效赋能多模态大模型训练任务

海天瑞声11月数据集上新&#xff01;这次推出的数据集包括语音识别、语音合成、多模态等领域&#xff0c;可用于多模态大模型训练任务&#xff0c;开发者可轻松应对数据瓶颈&#xff0c;高效提升模型性能。 印度尼西亚语语音识别数据集 泰语语音识别数据集 温柔贴心中文女声语…

ES集群规模与角色规划

业务场景需求 业务特征 目前日志统计分析集群具有以下关键特征&#xff1a; 延迟要求&#xff1a;30秒以内并发性能&#xff1a;高并发读写数据容错&#xff1a;可容忍少量数据丢失 数据规模 每日原始日志采集量&#xff1a;约150GB数据查询范围&#xff1a; 近期数据&…

[Redis#14] 持久化 | RDB | bgsave | check-rdb | 灾备

目录 0.概述 持久化的策略 1 RDB 1.1 触发机制 1.2 流程说明 1.3 RDB 的优缺点 0.概述 在学习 MySQL 数据库时&#xff0c;我们了解到事务的四个核心特性&#xff1a;原子性、一致性、持久性和隔离性。这些特性确保了数据库操作的安全性和可靠性。当我们转向 Redis 时&a…