Spring @Cacheable缓存注解用法说明

注解Cacheable 是 Spring 框架中用于缓存数据的方法或类的注解。通过使用这个注解,你可以避免重复计算和重复获取数据,从而提高应用程序的性能。

基本用法

  • 引入依赖

确保在你的项目中引入了 Spring Cache 相关的依赖。如果你使用的是 Spring Boot,可以在 pom.xml 中添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
  • 启用缓存

在主类或配置类上使用 @EnableCaching 注解来启用缓存功能。

@SpringBootApplication
@EnableCaching
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
  • 使用 @Cacheable 注解

在需要缓存的方法上使用 @Cacheable 注解。

@Service
public class UserService {@Cacheable("lizz:users")public User getUserById(Long id) {// 模拟一个耗时的数据库查询try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}return new User(id, "John Doe");}
}
  • 配置缓存

        Spring 提供了多种缓存实现,包括内存缓存(如 ConcurrentMapCache)、第三方缓存(如 EhCache、Caffeine、Redis 等)。可以在配置文件(如 application.propertiesapplication.yml)中进行配置。

  • 使用 ConcurrentMapCache本地缓存
spring:cache:type: simple
  • 使用 Redis 作为缓存
spring:cache:type: redisredis:host: 172.1.1.11port: 6379

高级用法

  • 缓存条件:condition

使用 condition 属性指定缓存条件,只换成id大于10的数据缓存

@Cacheable(value = "lizz:users", condition = "#id > 10")
public User getUserById(Long id) {// ...
}
  •  自定义缓存键

 使用 key 属性自定义缓存键。

@Cacheable(value = "users", key = "#root.methodName + #id")
public User getUserById(Long id) {// ...
}
  •  同步更新:sync

sync=true时,如果多个线程同时访问缓存中没有的数据,只有一个线程会执行方法以加载数据,其他线程会等待加载完成并获取相同的结果。这可以防止缓存穿透(即多个线程同时访问缓存时都绕过缓存直接访问底层存储)。

@Cacheable(value = "users", sync = true)
public User getUserById(Long id) {// ...
}

缓存失效:@CacheEvict

  • allEntries=true:清除所有缓存数据
@CacheEvict(value = "lizz:users", allEntries = true)
public void clearCache() {// //清除全部缓存相关的其他业务操作
}
  • key = "#id" :清除缓存集合中指定key的数据
@CacheEvict(value = "lizz:users", key = "#id")
public void delUser(Long id) {//清除id缓存相关的其他业务操作
}
  • 缓存同步:@CachePut

 使用 @CachePut 注解更新缓存。

@CachePut(value = "lizz:users", key = "#user.id")
public User updateUser(User user) {// 更新用户的逻辑return user;
}

结合缓存组件

  • 引入caffeine

        <!--快速本地缓存--><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId></dependency>
  • 使用caffeine作为springcache管理
@EnableCaching
@Configuration
public class CaffeineCacheConfig {@Beanpublic CacheManager cacheManager() {CaffeineCacheManager cacheManager = new CaffeineCacheManager("ta:region");cacheManager.setCaffeine(caffeineCacheBuilder());return cacheManager;}Caffeine<Object, Object> caffeineCacheBuilder() {return Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).maximumSize(100);}
}

 

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

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

相关文章

中英双语介绍中国的城市:上海市(Shanghai)

中文版 上海市是中国最大的城市之一&#xff0c;也是全球重要的金融、贸易和航运中心。作为一座现代化的国际大都市&#xff0c;上海以其繁华的商业区、丰富的文化遗产和多样化的经济结构而闻名。以下是对上海市的详细介绍&#xff0c;包括其地理位置、人口、经济、教育、文化…

qt结合vs2022安装

进入清华大学开源软件&#xff1a; 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载完成后&#xff0c;双击进行安装&#xff1a; 进入邮箱进行验证&#xff1a; 可能是因为网络问题&#xff0c;无法安装。 重新安装5.12.12版本。 安装后启动失败&#xff0c;重新…

后端接口设计考虑要点

1. 接口参数校验 入参校验&#xff1a;确保必要参数不为空&#xff0c;限制长度和格式&#xff08;例如邮箱格式&#xff09;。返回值校验&#xff1a;确定返回值不为空&#xff0c;为空时返回与前端协商的默认值。 2. 接口扩展性 设计通用接口而非仅针对特定业务流程的接口…

横截面交易策略:概念与示例

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

数据结构--单链表实现

欢迎光顾我的homepage 前言 链表和顺序表都是线性表的一种&#xff0c;但是顺序表在物理结构和逻辑结构上都是连续的&#xff0c;但链表在逻辑结构上是连续的&#xff0c;而在物理结构上不一定连续&#xff1b;来看以下图片来认识链表与顺序表的差别 这里以动态顺序表…

WGAN(Wassertein GAN)

WGAN E x ∼ P g [ log ⁡ ( 1 − D ( x ) ) ] E x ∼ P g [ − log ⁡ D ( x ) ] \begin{aligned} & \mathbb{E}_{x \sim P_g}[\log (1-D(x))] \\ & \mathbb{E}_{x \sim P_g}[-\log D(x)] \end{aligned} ​Ex∼Pg​​[log(1−D(x))]Ex∼Pg​​[−logD(x)]​ 原始 GAN …

springboot基于Java的超市进销存系统+ LW+ PPT+源码+讲解

第三章系统分析与设计 3.1 可行性分析 一个完整的系统&#xff0c;可行性分析是必须要有的&#xff0c;因为他关系到系统生存问题&#xff0c;对开发的意义进行分析&#xff0c;能否通过本网站来补充线下超市进销存管理模式中的缺限&#xff0c;去解决其中的不足等&#xff0c…

6域名系统DNS

《计算机网络》第7版&#xff0c;谢希仁 每次记不清楚的知识点&#xff0c;通过上网查找&#xff0c;总是只能看到很零碎的答案。最后还是最喜欢看这个版本的书&#xff0c;一看就回忆起来了&#xff0c;逻辑严谨&#xff0c;循循善诱&#xff0c;知识讲解的全面又清晰&#xf…

架构师应该在团队中发挥怎样的作用?

架构师分为5种&#xff1a; 1.企业架构师EA(Enterprise Architect) EA的职责是决定整个公司的技术路线和技术发展方向。 2.基础结构架构师IA(Infrastructure Architect) IA的工作就是提炼和优化技术方面积累和沉淀形成的基础性的、公共的、可复用的框架和组件&#xff0c;这…

Qt 基础组件速学 鼠标和键盘事件

学习目标&#xff1a; 鼠标事件和键盘事件应用 前置环境 运行环境:qt creator 4.12 学习内容和效果演示&#xff1a; 1.鼠标事件 根据鼠标的坐标位置&#xff0c;做出对应的事件。 2.键盘事件 根据键盘的输入做出对应操作 详细主要代码 1.鼠标事件 #include "main…

一文读懂轻量日志收集系统Loki工作原理

Loki 是由 Grafana Labs 开发的日志聚合系统&#xff0c;设计目标是提供一种高效、低成本的日志收集和查询解决方案。与传统的日志系统&#xff08;如 ELK Stack&#xff09;不同&#xff0c;Loki 不会对日志内容进行索引&#xff0c;而是仅对日志的元数据进行索引&#xff0c;…

美国大带宽服务器租用优势和注意事项

美国大带宽服务器租用对于需要处理大量数据和提供高速网络服务的企业至关重要。下面将详细讨论美国大带宽服务器租用的优势、适用场景及注意事项&#xff0c;rak部落小编为您整理发布美国大带宽服务器租用的优势和注意事项。 优势 1. 高速数据传输&#xff1a; - 大带宽服务器提…

FTP、http 、tcp

HTTP VS FTP HTTP &#xff1a;HyperText Transfer Protocol 超文本传输协议&#xff0c;是基于TCP协议 FTP&#xff1a; File Transfer Protocol 文件传输协议&#xff0c; 基于TCP协议&#xff0c; 基于UDP协议的FTP 叫做 TFTP HTTP 协议 通过一个SOCKET连接传输依次会话数…

FIND_IN_SET使用案例--[sql语句根据多ids筛选出对应数据]

一 FIND_IN_SET select id,system_ids from intellect_client_info where FIND_IN_SET(5, system_ids) > 0;

Spring Boot 中的监视器是什么?有什么作用?

前言&#xff1a; 监听器相信熟悉 Spring、Spring Boot 的都知道&#xff0c;但是监视器又是什么&#xff1f;估计很多人一脸懵的状态&#xff0c;本篇分享一下 Spring Boot 的监视器。 Spring Boot 系列文章传送门 Spring Boot 启动流程源码分析&#xff08;2&#xff09; …

Apache DolphinScheduler 与 AWS 的 EMR/Redshift 集成实践分享

引言 这篇文章将给大家讲解关于DolphinScheduler与AWS的EMR和Redshift的集成实践&#xff0c;通过本文希望大家能更深入地了解AWS智能湖仓架构&#xff0c;以及DolphinScheduler在实际应用中的重要性。 AWS智能湖仓架构 首先&#xff0c;我们来看一下AWS经典的智能湖仓架构图…

【第20章】MyBatis-Plus逻辑删除支持

文章目录 前言一、逻辑删除的工作原理二、支持的数据类型三、使用方法1.配置全局逻辑删除属性2.在实体类中使用 TableLogic 注解 四、常见问题解答1. 如何处理插入操作&#xff1f;2. 删除接口自动填充功能失效怎么办&#xff1f; 五、实战1. 全局配置2. 添加TableLogic3. 自动…

高考选专业,兴趣与就业前景该如何平衡?

从高考结束的那一刻开始&#xff0c;有些家长和学生就已经变得焦虑了&#xff0c;因为他们不知道成绩出来的时候学生应该如何填报志愿&#xff0c;也不知道选择什么样的专业&#xff0c;毕竟大学里面的专业丰富多彩&#xff0c;如何选择确实是一门学问&#xff0c;而对于学生们…

Oracle的RECYCLEBIN回收站:轻松恢复误删对象

目录 Oracle的RECYCLEBIN回收站&#xff1a;轻松恢复误删对象一、概念二、工作原理三、使用方法1 查看回收站中的对象2 恢复回收站中的对象2.1 恢复表&#xff08;TABLE&#xff09;2.2 恢复索引&#xff08;INDEX&#xff09;2.3 恢复视图&#xff08;VIEW&#xff09;2.4 恢复…

乐清网站建设规划书

乐清是位于浙江省温州市的一个县级市&#xff0c;拥有悠久的历史和丰富的文化底蕴。随着互联网的快速发展&#xff0c;网站建设成为推动乐清经济和文化发展的重要手段。因此&#xff0c;我们认为有必要制定一个全面的乐清网站建设规划书&#xff0c;以促进乐清的经济繁荣和文化…