SpringBoot 缓存之 @Cacheable 详细介绍

SpringBoot 缓存之 @Cacheable 详细介绍一 简介 1 缓存介绍 Spring 从 3 1 开始就引入了对 Cache 的支持 定义了 org springframew cache Cache 和 org springframew cache CacheManager 接口来统一不同的缓存技术 并支持使用 JCache JSR 107 注解简化我们的开发 其使用方法和原理都类似于 Spring 对事务管理的支持 SpringCache 是作用在方法上的 其核心思想是 当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个

一、简介

1、缓存介绍

Spring 从 3.1 开始就引入了对 Cache 的支持。定义了 org.springframework.cache.Cacheorg.springframework.cache.CacheManager 接口来统一不同的缓存技术。并支持使用 JCache(JSR-107)注解简化我们的开发。

其使用方法和原理都类似于 Spring 对事务管理的支持。Spring Cache 是作用在方法上的,其核心思想是,当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存在缓存中。



2、Cache 和 CacheManager 接口说明

  • Cache 接口包含缓存的各种操作集合,你操作缓存就是通过这个接口来操作的。
  • Cache 接口下 Spring 提供了各种 xxxCache 的实现,比如:RedisCache、EhCache、ConcurrentMapCache
  • CacheManager 定义了创建、配置、获取、管理和控制多个唯一命名的 Cache。这些 Cache 存在于 CacheManager 的上下文中。



小结:

每次调用需要缓存功能的方法时,Spring 会检查指定参数的指定目标方法是否已经被调用过,如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。



二、@Cacheable 注解使用详细介绍

1、缓存使用步骤

@Cacheable 这个注解,用它就是为了使用缓存的。所以我们可以先说一下缓存的使用步骤:

1、开启基于注解的缓存,使用 @EnableCaching 标识在 SpringBoot 的主启动类上。

2、标注缓存注解即可



① 第一步:开启基于注解的缓存,使用 @EnableCaching 标注在 springboot 主启动类上

SpringBoot 缓存之 @Cacheable 详细介绍



② 第二步:标注缓存注解

SpringBoot 缓存之 @Cacheable 详细介绍

注:这里使用 @Cacheable 注解就可以将运行结果缓存,以后查询相同的数据,直接从缓存中取,不需要调用方法。



2、常用属性说明

下面介绍一下 @Cacheable 这个注解常用的几个属性:

  • cacheNames/value :用来指定缓存组件的名字
  • key :缓存数据时使用的 key,可以用它来指定。默认是使用方法参数的值。(这个 key 你可以使用 spEL 表达式来编写)
  • keyGenerator :key 的生成器。 key 和 keyGenerator 二选一使用
  • cacheManager :可以用来指定缓存管理器。从哪个缓存管理器里面获取缓存。
  • condition :可以用来指定符合条件的情况下才缓存
  • unless :否定缓存。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。当然你也可以获取到结果进行判断。(通过 #result 获取方法结果)
  • sync :是否使用异步模式。



cacheNames

用来指定缓存组件的名字,将方法的返回结果放在哪个缓存中,可以是数组的方式,支持指定多个缓存。

SpringBoot 缓存之 @Cacheable 详细介绍



key

缓存数据时使用的 key。默认使用的是方法参数的值。可以使用 spEL 表达式去编写。

SpringBoot 缓存之 @Cacheable 详细介绍



keyGenerator

key 的生成器,可以自己指定 key 的生成器,通过这个生成器来生成 key。

SpringBoot 缓存之 @Cacheable 详细介绍



SpringBoot 缓存之 @Cacheable 详细介绍

这样放入缓存中的 key 的生成规则就按照你自定义的 keyGenerator 来生成。不过需要注意的是:

@Cacheable 的属性,key 和 keyGenerator 使用的时候,一般二选一。



condition

符合条件的情况下才缓存。方法返回的数据要不要缓存,可以做一个动态判断。

SpringBoot 缓存之 @Cacheable 详细介绍



unless

否定缓存。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。

SpringBoot 缓存之 @Cacheable 详细介绍



sync

是否使用异步模式。默认是方法执行完,以同步的方式将方法返回的结果存在缓存中。

3、spEL 编写 key

前面说过,缓存的 key 支持使用 spEL 表达式去编写,下面总结一下使用 spEL 去编写 key 可以用的一些元数据:

SpringBoot 缓存之 @Cacheable 详细介绍



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200445.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午10:50
下一篇 2026年3月20日 上午10:50


相关推荐

  • 404页面制作

    404页面制作router/index.js//引用模板importErrorfrom’../components/Error.vue’//配置路由exportdefault[{ path:’*’, component:Error} ]Error.vue<template> <div> {{msg}} 页面不存在 </div…

    2022年7月27日
    7
  • python中divmod函数的用法_Python中divmod函数的用法

    python中divmod函数的用法_Python中divmod函数的用法Python 中 divmod 函数的用法 语言 余数 是一种 面向对象 函数 Python 中 divmod 函数的用法 Python 中 divmod 函数的用法在 Python 中 divmod 函数的作用是把除数和余数运算结果结合起来 其用法为 divmod a b 其中 a 和 b 的类型都是数字类型 返回值为一个包含商和余数的元组 使用时该函数无需导入 可直接使用 PythonPython 是一个高层次的结合了解释性

    2025年12月3日
    8
  • 华为吴晟:分布式监控系统的设计与实现

    华为吴晟:分布式监控系统的设计与实现

    2022年3月6日
    45
  • 自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」

    自己动手,丰衣足食。普通键盘实现键盘宏(Windows和Mac版)「建议收藏」很多高端机械键盘,支持宏定义,例如我们可以设置”D”键为”dota”,这样当我们按一下宏开启键,再按一下”D”键,就等价于分别按了”d””o””t””a”四个键。这时就可以把一些敲代码时常用的模板定义成键盘宏,到时候一键补全代码,既高效又装X。另外,玩游戏时想按出“下前下前拳”这样的组合技能也容易多了。那么问题来了。。山里来的买不起机械键盘的穷B同时又是程序员应该怎么办。。其实这…

    2025年7月6日
    7
  • python题库刷题训练选择题_python值得学吗

    python题库刷题训练选择题_python值得学吗学python嘻嘻,每题第一个是自己的代码,后面的是看见有些好的代码就顺手保存一波了~侵删1916购物1956费马大定理扩展1957幼儿园霸王***********************

    2022年8月6日
    7
  • 程序英语

    decline衰退、减少configure配置、设定consult顾问duediligence尽调sheet表单、纸、被单Extraction-Loading-TransformationIntegratedDevelopmentEnvironmentide集成开发环境desktop桌面console控制台orient标定方向 at…

    2022年4月3日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号