news 2026/4/4 2:40:21

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/4/2 11:35:00

Windows平台Conda activate报错?Miniconda初始化指南

Windows平台Conda activate报错&#xff1f;Miniconda初始化指南 在人工智能和数据科学项目中&#xff0c;Python 已经成为事实上的标准语言。但随着项目增多&#xff0c;不同任务对 Python 版本、库依赖的要求千差万别——有的需要 PyTorch 1.13&#xff0c;有的必须用 Tensor…

作者头像 李华
网站建设 2026/3/20 3:01:15

requests.post vs 传统方法:效率对比实测

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比测试项目&#xff0c;分别使用&#xff1a;1. requests.post 2. urllib.request 3. http.client 实现相同的POST请求功能。要求&#xff1a;1. 统计各方法的代码行数 2…

作者头像 李华
网站建设 2026/3/16 4:09:14

企业级SSH端口管理实战:从-p参数到安全运维

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个企业SSH端口管理系统&#xff0c;功能包括&#xff1a;1. 批量扫描指定端口范围(-p)的SSH服务 2. 自动生成可视化拓扑图 3. 异常连接告警 4. 合规性检查报告。使用DeepSeek…

作者头像 李华
网站建设 2026/4/3 2:45:09

C#调用FLUX.1-dev模型API:Windows环境下AI集成实践

C#调用FLUX.1-dev模型API&#xff1a;Windows环境下AI集成实践 在当今智能应用快速演进的背景下&#xff0c;越来越多的企业希望将前沿AI能力无缝嵌入现有的业务系统中。尤其是图像生成技术——从一段文字自动生成高质量视觉内容的能力——正逐步被应用于设计辅助、营销素材制作…

作者头像 李华
网站建设 2026/3/27 19:09:56

vLLM推理加速镜像发布:支持LLaMA、Qwen、ChatGLM,吞吐提升10倍

vLLM推理加速镜像发布&#xff1a;支持LLaMA、Qwen、ChatGLM&#xff0c;吞吐提升10倍 在大模型落地如火如荼的今天&#xff0c;一个现实问题始终困扰着AI工程团队&#xff1a;如何让7B、13B甚至更大的语言模型&#xff0c;在有限的GPU资源下稳定支撑成百上千用户的并发请求&am…

作者头像 李华
网站建设 2026/4/3 1:02:06

GHelper终极指南:ROG笔记本性能优化与个性化控制完整教程

还在为华硕官方控制软件的卡顿和复杂操作而头疼吗&#xff1f;GHelper来拯救你的ROG笔记本了&#xff01;这款轻量级的开源工具专为华硕ROG系列笔记本设计&#xff0c;帮你轻松掌控硬件性能&#xff0c;释放游戏本的真正潜力。 【免费下载链接】g-helper Lightweight Armoury C…

作者头像 李华