行业资讯 2025年08月6日
0 收藏 0 点赞 204 浏览 2521 个字
摘要 :

文章目录 一、Spring Boot缓存基础概念 (一)缓存的引入 (二)Cache和CacheManager接口详解 二、@Cacheable注解使用说明 (一)使用@Cacheable的步骤 (二)@Cache……




  • 一、Spring Boot缓存基础概念
    • (一)缓存的引入
    • (二)Cache和CacheManager接口详解
  • 二、@Cacheable注解使用说明
    • (一)使用@Cacheable的步骤
    • (二)@Cacheable常用属性说明
    • (三)用SpEL编写缓存键

    本文将详细介绍@Cacheable注解,从缓存的基本概念,到@Cacheable的使用步骤、常用属性,以及如何用SpEL编写缓存键,让你全面掌握@Cacheable注解的使用。

    一、Spring Boot缓存基础概念

    (一)缓存的引入

    从Spring 3.1版本起,就加入了对缓存(Cache)的支持。这就好比给应用加了一个“记忆小助手”,能记住之前处理过的数据,下次要用时直接拿出来,不用再重复处理,大大提高了程序运行速度。

    Spring定义了org.springframework.cache.Cacheorg.springframework.cache.CacheManager接口,这两个接口的作用是把各种不同的缓存技术统一起来管理。同时,它还支持用JCache(JSR - 107)注解,让开发人员能更轻松地使用缓存功能。它的使用方式和Spring对事务管理的支持有点像,都是在方法层面发挥作用。简单来说,当调用一个有缓存功能的方法时,Spring会把方法的参数和返回结果当成一对“钥匙”和“箱子”,存到缓存里。下次再调用这个方法,Spring先看看缓存里有没有对应的“箱子”,有的话直接拿出来用,没有就先执行方法,再把结果存到缓存里。

    (二)Cache和CacheManager接口详解

    Cache接口就像是一个操作缓存的“工具箱”,里面包含了各种对缓存进行操作的方法,像存数据、取数据、删数据等。在这个接口下,Spring还提供了好多不同的实现类,比如RedisCache(基于Redis的缓存实现)、EhCache(一种纯Java的进程内缓存框架实现)、ConcurrentMapCache(基于Java的ConcurrentMap实现的简单缓存)。

    CacheManager则像是一个“缓存管理员”,负责创建、配置、获取、管理和控制多个有唯一名字的Cache。这些Cache都在CacheManager的管理范围内,就像员工在经理的管理下工作一样。

    二、@Cacheable注解使用说明

    (一)使用@Cacheable的步骤

    1)开启基于注解的缓存:要使用@Cacheable注解,第一步是在Spring Boot的主启动类上加上@EnableCaching注解。这就好比给缓存功能“开了个门”,让它能在项目里发挥作用。

    2)标注缓存注解:在需要缓存的方法上标注@Cacheable注解。例如:

    @Cacheable(cacheNames = \"emps\", key = \"#id\")// #id 就表示取出参数 id 的值作为 key 
    public Employee getEmployee(Integer id) {
        System.out.println(\"查询\" + id);
        Employee employee = employeeMapper.getEmpById(id);
        return employee;
    }
    

    这段代码里,@Cacheable注解的作用是把getEmployee方法的运行结果缓存起来。以后再查询相同id的员工信息时,直接从缓存里取,不用再执行getEmployee方法里面的查询操作了。

    (二)@Cacheable常用属性说明

    1. cacheNames/value:这个属性用来指定把方法的返回结果存到哪个缓存组件里。可以用数组的形式指定多个缓存,就像把东西放到不同的“箱子”里。比如@Cacheable(cacheNames = {\"emps1\", \"emps2\"})
    2. key:它是缓存数据时用的“钥匙”。默认情况下,用的是方法参数的值。不过,也可以用SpEL表达式(Spring表达式语言)来编写更灵活的“钥匙”。比如@Cacheable(cacheNames = \"emps\", key = \"#id + \'_employee\'\"),这样生成的“钥匙”就是id的值加上_employee
    3. keyGenerator:这是“钥匙”的生成器,可以自己定义生成“钥匙”的规则。使用它时,和key属性一般二选一。如果用了keyGenerator,缓存里“钥匙”的生成规则就按你自定义的来。
    4. cacheManager:通过这个属性可以指定从哪个“缓存管理员”(CacheManager)那里获取缓存。就像在多个仓库里选择从哪个仓库取东西一样。
    5. condition:这个属性用来设置缓存的条件。只有满足设定条件时,方法返回的数据才会被缓存。比如@Cacheable(cacheNames = \"emps\", condition = \"#id > 0\"),只有当id大于0时,查询结果才会被缓存。
    6. unless:它的作用和condition相反,是否定缓存的。当unless指定的条件为true时,方法的返回值就不会被缓存。还可以通过#result获取方法的结果进行判断。比如@Cacheable(cacheNames = \"emps\", unless = \"#result == null\"),如果查询结果为空,就不缓存。
    7. sync:这个属性用来设置是否使用异步模式。默认情况下,方法执行完后,会以同步的方式把返回结果存到缓存里。要是设置为true,就会用异步方式,方法执行完不用等结果存到缓存就可以继续执行其他操作了。

    (三)用SpEL编写缓存键

    前面提到缓存的“钥匙”(key)可以用SpEL表达式编写,下面简单总结一下用SpEL编写“钥匙”时能用到的一些元数据:Spring Boot缓存中的@Cacheable注解详解

    掌握了@Cacheable注解这些知识,在开发Spring Boot应用时,就能更好地利用缓存提升性能啦!希望大家都能熟练运用,有兴趣的朋友可以先去整合下ehcache缓存去练练手吧,springboot整合ehcache3教程如下:

    Springboot 整合 Ehcache3 详细步骤

    文章目录 第一步:导入maven依赖 第二步:配置ehcache.xml 第三步:配置application. […]

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/10288.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号