Spring Cache-基于注解的缓存

ops/2024/10/30 21:51:35/

Spring Cache 是 Spring 提供的缓存抽象框架,能够将数据缓存到内存或外部缓存中,减少数据库或远程服务的访问频率,从而显著提升应用性能。Spring Cache 通过注解的方式实现缓存逻辑,使用方便,支持多种缓存实现,例如 ConcurrentMapEhCacheRedis 等。

1. Spring Cache 介绍

1.1 简介

Spring Cache 的核心是缓存抽象,通过注解方式自动管理缓存内容。Spring Cache 的特点包括:

  1. 缓存抽象:Spring Cache 提供了统一的缓存 API,可以通过不同的缓存实现(如 Redis、EhCache)来存储数据。
  2. 简洁易用:只需简单的注解,开发者可以在业务逻辑代码中实现缓存
  3. 支持多种缓存策略:支持多种缓存策略如自动刷新、过期、更新等,适合多种业务场景。
  4. 可扩展性:Spring Cache 支持多种第三方缓存库,允许在项目需求变化时灵活选择缓存策略。

1.2 依赖

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

2. 常用注解

Spring Cache 提供了丰富的注解来控制缓存的不同操作,以下是常用的注解

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

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

2.1 @EnableCaching

@EnableCaching 是 Spring Cache 的入口注解,用于启用 Spring 的缓存功能。这个注解通常加在 Spring Boot 启动类上。

java">@SpringBootApplication
@EnableCaching
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2.2 @Cacheable

在方法执行前,spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存

  • 作用:将方法的返回结果进行缓存,以便下次使用相同参数调用时直接从缓存中获取。
  • 属性
    • value:指定缓存的名称。
    • key缓存的键(可用 SpEL 表达式定义)。
    • condition缓存条件,满足条件时才进行缓存
java">@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {// 从数据库获取用户信息
}

2.3 @CachePut

  • 作用:更新缓存,但不影响方法的正常调用。常用于修改或新增方法,保证缓存中的数据与数据库一致。
  • 属性
    • valuekey:同 @Cacheable,指定缓存的名称和键。
    • condition缓存条件,满足条件时才进行缓存
java">@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {// 更新数据库中的用户信息return user;
}

说明:key的写法如下

#user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key ;

#result.id : #result代表方法返回值,该表达式 代表以返回对象的id属性作为key ;

#p0.id:#p0指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;

#a0.id:#a0指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;

#root.args[0].id:#root.args[0]指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数

的id属性作为key ;

2.4 @CacheEvict

  • 作用:清除缓存,通常用于删除操作。
  • 属性
    • valuekey:指定缓存的名称和键。
    • allEntries:是否清除所有缓存内容,默认为 false。设置为 true 时会清除指定 value 中的所有缓存
    • beforeInvocation:是否在方法调用前清除缓存,默认为 false(即方法执行后清除缓存)。
java">@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) {// 删除数据库中的用户信息
}

2.5 @Caching

当一个方法需要同时具备多种缓存操作时,可以用 @Caching 组合多个缓存注解

java">@Caching(put = { @CachePut(value = "users", key = "#user.id") },evict = { @CacheEvict(value = "usernames", key = "#user.username") }
)
public User updateUser(User user) {// 更新用户信息return user;
}


http://www.ppmy.cn/ops/129704.html

相关文章

MySQL-SQL性能分析

SQL执行频率 Mysql客户端连接成功后&#xff0c;通过 show [ session | global ] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的 insert &#xff0c;update &#xff0c; delete&#xff0c;select 的访问频次。show global status like…

在vue项目中,如何写一个自定义指令

在 Vue.js 中&#xff0c;自定义指令&#xff08;Custom Directives&#xff09;是一种扩展 Vue 功能的方法&#xff0c;允许开发者创建自己的自定义绑定逻辑。自定义指令可以用来操作 DOM 元素&#xff0c;实现一些特殊的交互效果或者其他需求。 在 Vue 项目中&#xff0c;自…

1x1卷积核到底是什么

1x1卷积核其实是三维的&#xff0c;即1x1xn&#xff0c;其中n称为通道数。卷积核的每一维都会滑动窗口般在数据上相乘再加和为一个数&#xff0c;如2x2x4经过1x1x4卷积后变成了2x2x1&#xff0c;经过1x1x2后变成了2x2x3&#xff0c;从而实现了通道数的变化。

Nginx基础配置

upstream backend中配置服务端地址及端口&#xff1b; server&#xff1a; listen:客户端访问nginx的端口 servername:配置nginx所在的服务器地址 localtion:配置访问客户端的地址&#xff0c;默认主页为index.html,其中root指的是网站所存放的根目录 try-file的作用是跳…

WPF拖拽交互全攻略及实现自定义拖拽控件及数据交换技巧解析

目录 1. 基本概念2 . 实现拖拽功能概述需要要实现基本的拖放&#xff0c;完成以下任务&#xff1a;其他操作 示例3.1 设置拖拽源&#xff0c;拖拽开始3.2 设置拖拽效果DragDropEffects 3.3 设置放置目标&#xff0c;处理拖拽数据拖拽输入DragEnter事件DragOver事件拖拽离开Drag…

HTML入门教程3:HTML元素

一、HTML元素的基本概念 HTML元素由开始标签、结束标签和内容组成。开始标签用于指定元素的名称&#xff0c;结束标签用于标记元素的结束&#xff0c;而内容则位于开始标签和结束标签之间。例如&#xff0c;<p>这是一个段落</p>中&#xff0c;<p>是段落元素…

Unity构建WebGL知识点

基础知识&#xff1a; 跨域问题&#xff1a; 跨域问题是指在 Web 开发中&#xff0c;浏览器出于安全考虑&#xff0c;限制一个域上的网页访问另一个域上的资源。这种限制是为了防止恶意网站窃取用户数据或进行其他不安全的操作。原因&#xff1a; 同源策略&#xff1a;浏览器…

青少年编程与数学 02-002 Sql Server 数据库应用 15课题、备份与还原

青少年编程与数学 02-002 Sql Server 数据库应用 15课题、备份与还原 课题摘要:一、数据库备份与还原数据库备份备份策略数据库还原还原注意事项 二、SQL Server 中的操作三、自动备份使用SQL Server Agent使用Windows任务计划程序注意事项 本课题介绍了SQL Server中数据库备份…