news 2026/4/2 11:00:44

Spring Cache讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Cache讲解

目录

  • 一、Spring Cache是什么
    • 1、核心优势
    • 2、基本使用
      • 1. 添加依赖
      • 2. 启用缓存
  • 二、核心注解详解
    • 1、@EnableCaching
    • 2、@Cacheable
    • 3、@CachePut
    • 4、@CacheEvict

一、Spring Cache是什么

Spring CacheSpring框架提供的缓存抽象层,让你可以轻松地在应用程序中添加缓存功能,而无需关心底层缓存实现细节。
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

1、核心优势

特点说明
声明式缓存使用注解即可实现缓存功能
抽象层设计支持多种缓存实现(RedisEhCacheGuava等)
与 Spring 集成完美集成 Spring 生态
方法级缓存基于方法返回值进行缓存
缓存策略灵活支持条件缓存、同步刷新等

2、基本使用

1. 添加依赖

<!-- Spring Boot Starter Cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><!-- Redis 作为缓存实现 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2. 启用缓存

@SpringBootApplication@EnableCaching// 启用缓存支持publicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}

二、核心注解详解

1、@EnableCaching

@EnableCachingSpring 框架中的一个注解,用于启用 Spring 的缓存支持。当你在配置类上添加此注解时,Spring 会创建一个缓存相关的切面,以拦截带有缓存注解的方法调用。

主要作用

  • 启用缓存机制:在 Spring 应用中激活缓存功能
  • 自动配置:根据项目依赖自动配置合适的CacheManager
  • 注解驱动:支持使用@Cacheable,@CacheEvict,@CachePut等注解
@Configuration@EnableCachingpublicclassCacheConfig{// Spring Boot 会自动配置合适的 CacheManager// 手动配置示例:@BeanpublicCacheManagercacheManager(){returnnewConcurrentMapCacheManager("users","products");}}

2、@Cacheable

@CacheableSpring 缓存中最核心的注解,用于标记方法的返回结果应该被缓存。
解释:在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中

@GetMapping@Cacheable(value="userCache",key="#id")publicUsergetById(Longid){Useruser=userMapper.getById(id);returnuser;}

@Cacheable(value = "userCache",key = "#id")value的属性是存在redis中的名称,存到redis的时候会创建value::keyredis中。
@Cacheable(value = "userCache",key = "#id")中的key是和value代码作为::后面的参数。
我们查看源码的时候可以看到,如下的情况:
key可以用多种情况展示,参数名称,当有多个参数的时候可以使用#p0,#p1,单一参数的时候可以使用#root,参数名称等多种情况。
数据验证

Debug运行项目,查看项目的执行流程。
使用Swagger进行代码调试:http://localhost:8888/doc.html#/home

当数据没有存到redis时候,会直接查询数据库,如果存到redis之后会直接从redis中查找,并且不经过代码直接返回。
redis没有存储信息:

接口会直接进入到代码当中:

返回结果:

redis中的结果:

现在redis中已经有了key值,我们再执行以下逻辑(根据耗时可以看出直接从redis中获取了):

3、@CachePut

@CachePut注解用于更新缓存,它总是会执行方法体,并将返回结果放入缓存中。与@Cacheable不同的是,无论缓存中是否已存在,都会执行方法并更新缓存。

参数详解

参数说明示例
value/cacheNames缓存名称"users"
key缓存键#user.id,#result.id
keyGenerator键生成器"customKeyGenerator"
cacheManager缓存管理器"redisCacheManager"
cacheResolver缓存解析器"customResolver"
condition执行条件#user != null
unless排除条件#result == null
参数使用方法:
@PostMapping@CachePut(value="userCache",key="#user.id")publicUsersave(@RequestBodyUseruser){userMapper.insert(user);returnuser;}

@CachePut(value = “userCache”,key = “#user.id”),可以根据user参数进行解析出来。
数据验证:
接口方法如下:

接口调试方法如下:

方法进入接口中:

结果如下:

4、@CacheEvict

@CacheEvict用于清除缓存中的数据。当数据发生变化(删除、更新)时,需要清除旧缓存,以保证数据一致性。
参数特征

参数说明默认值示例
value/cacheNames缓存名称-"users"
key要清除的缓存键#id,#user.id
allEntries是否清除所有条目falsetrue
beforeInvocation调用前还是调用后清除falsetrue
condition清除条件#id != null
keyGenerator键生成器"customKeyGenerator"
cacheManager缓存管理器"redisCacheManager"
cacheResolver缓存解析器"customResolver"

接口方法1:

@CacheEvict(value="userCache",key="#id")@DeleteMappingpublicvoiddeleteById(Longid){userMapper.deleteById(id);}

接口方法2:

@CacheEvict(value="userCache",allEntries=true)@DeleteMapping("/delAll")publicvoiddeleteAll(){userMapper.deleteAll();}

,key = "#id"是删除单个keyallEntries=true的时候是删除所有的key
运行结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 4:09:23

ensp下载官网无法访问?这里有网络工程学习替代路径

网络工程学习困局破局&#xff1a;当eNSP不可用时&#xff0c;AI如何重塑实训体验 在高校网络工程课堂上&#xff0c;一个再熟悉不过的场景正在反复上演&#xff1a;学生打开电脑准备完成VLAN配置实验&#xff0c;却发现华为eNSP官网无法访问&#xff1b;镜像下载链接失效、安装…

作者头像 李华
网站建设 2026/3/30 8:09:57

用Percona XtraBackup快速搭建数据库灾备原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个快速搭建MySQL灾备系统的原型工具&#xff0c;功能包括&#xff1a;1. 自动化配置主从复制环境 2. 集成Percona XtraBackup进行定期全量增量备份 3. 支持备份数据加密和异地…

作者头像 李华
网站建设 2026/3/21 21:09:07

你认为 “豆包手机” 有可能在激烈的手机市场中脱颖而出吗?

豆包手机&#xff0c;作为2025年12月发布的创新型智能手机&#xff0c;其背后的AI技术和情感智能系统引发了业内外广泛关注。随着智能手机市场进入成熟阶段&#xff0c;竞争变得更加激烈。很多厂商在追求硬件性能和智能化应用方面早已做了大量布局&#xff0c;而豆包的出现&…

作者头像 李华
网站建设 2026/3/31 5:27:37

Syncovery Premium:专业级文件同步备份解决方案,支持多协议与云存储

Syncovery Premium是一款功能全面的专业文件同步与备份工具&#xff0c;以其高效的同步算法和丰富的功能集&#xff0c;在数据管理领域保持着领先地位。该软件通过智能化的同步策略和灵活的配置选项&#xff0c;为用户提供了可靠的数据保护解决方案。 获取地址&#xff1a;htt…

作者头像 李华
网站建设 2026/3/29 2:41:32

在线考试系统毕业论文+PPT(附源代码+演示视频)

文章目录在线考试系统一、项目简介&#xff08;源代码在文末&#xff09;1.运行视频2.&#x1f680; 项目技术栈3.✅ 环境要求说明4.包含的文件列表&#xff08;含论文&#xff09;数据库结构与测试用例系统功能结构前台运行截图后台运行截图项目部署源码下载在线考试系统 如需…

作者头像 李华
网站建设 2026/3/29 13:14:04

Git Stash临时保存未完成的PyTorch代码修改

Git Stash临时保存未完成的PyTorch代码修改 在深度学习项目中&#xff0c;你是否经历过这样的场景&#xff1a;正全神贯注地调试一个复杂的PyTorch模型训练脚本&#xff0c;刚写完数据增强逻辑、调整了优化器参数&#xff0c;突然收到消息——生产环境的主分支出现严重bug&…

作者头像 李华