Springboot使用@Cacheable注解实现数据缓存

 更新时间:2023年10月09日 10:39:10   作者:sg_knight  
本文介绍如何在Springboot中通过@Cacheable注解实现数据缓存,在每次调用添加了@Cacheable注解的方法时,Spring 会检查指定参数的指定目标方法是否已经被调用过,文中有详细的代码示例,需要的朋友可以参考下

1、添加 @EnableCaching

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

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

2、添加@Cacheable

在需要缓存的方法上添加@Cacheable注解。以后查询相同的数据,直接从缓存中取,不需要调用方法。

@Cacheable(value = "areaTreeData")
public CommonResult<List<Map<String, Object>>> queryTreeData(Long pId, Long lv) {
  Map<String, Object> map = new HashMap<>();
  map.put("state", 1);
  List<Map<String, Object>> list = getTreeData(map, pId, lv);
  return new CommonResult<>(list);
}

注意:

1、返回的数据类型必须支持序列化或实现了Serializable接口,否则数据没法缓存。

2、只有直接调用该方法才能缓存,不能通过类中的其他方法来调用。

3、常用属性说明

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

4、@CacheEvict注解

@CachEvict 的作用 主要针对方法配置,能够根据一定的条件对缓存进行清空。常用属性参数如下:

参数解释example
value缓存的名称,在 spring 配置文件中定义,必须指定至少一个@CacheEvict(value=”my cache”)
key缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合@CacheEvict(value=”testcache”,key=”#userName”)
condition缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存@CacheEvict(value=”testcache”,condition=”#userName.length()>2”)
allEntries是否清空所有缓存内容,缺省为 false,如果指定为 true,则方法调用后将立即清空所有缓存@CachEvict(value=”testcache”,allEntries=true)
beforeInvocation是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存@CachEvict(value=”testcache”,beforeInvocation=true)
@CacheEvict(value = "areaTreeData", allEntries = true, beforeInvocation = true)
public Integer save(SysArea sysArea) {
   return mapper.insertSelective(sysArea);
}

以上就是Springboot使用@Cacheable注解实现数据缓存的详细内容,更多关于Springboot数据缓存的资料请关注脚本之家其它相关文章!

相关文章

  • 详解SpringBoot下文件上传与下载的实现

    详解SpringBoot下文件上传与下载的实现

    这篇文章主要介绍了SpringBoot下文件上传与下载的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Java FastJson使用教程

    Java FastJson使用教程

    这篇文章主要介绍了如何使用FastJson,帮助大家将 Java 对象转换为 JSON 格式,感兴趣的朋友可以了解下
    2020-10-10
  • java设计模式之单例模式

    java设计模式之单例模式

    这篇文章主要为大家详细介绍了java设计模式之单例模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 详解基于java的Socket聊天程序——服务端(附demo)

    详解基于java的Socket聊天程序——服务端(附demo)

    这篇文章主要介绍了详解基于java的Socket聊天程序——服务端(附demo),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • 深度解析MyBatis 动态 SQL 与缓存机制

    深度解析MyBatis 动态 SQL 与缓存机制

    本文从动态SQL核心语法、缓存实现原理、性能优化及面试高频问题四个维度,结合源码与工程实践,系统解析MyBatis的核心特性与最佳实践,感兴趣的朋友一起看看吧
    2025-06-06
  • 基于SpringBoot 使用 Flink 收发Kafka消息的示例详解

    基于SpringBoot 使用 Flink 收发Kafka消息的示例详解

    这篇文章主要介绍了基于SpringBoot 使用 Flink 收发Kafka消息,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Spring框架的环境搭建和测试实现

    Spring框架的环境搭建和测试实现

    这篇文章主要介绍了Spring框架的环境搭建和测试实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 深入浅出分析Java 类和对象

    深入浅出分析Java 类和对象

    面向对象乃是Java语言的核心,是程序设计的思想。Java语言的面向对象技术包括了面向对象和面向过程的基本概念,面向对象的特征,Java语言的类,对象,修饰符,抽象类等一系列的知识点
    2022-03-03
  • spring boot与ktor整合的实现方法

    spring boot与ktor整合的实现方法

    这篇文章主要给大家介绍了关于spring boot与ktor整合的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • idea +junit单元测试获取不到bean注入的解决方式

    idea +junit单元测试获取不到bean注入的解决方式

    这篇文章主要介绍了idea +junit单元测试获取不到bean注入的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论