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


            本文介绍如何在Springboot中通过@Cacheable注解实现数据缓存。在每次调用添加了@Cacheable注解的方法(需要缓存功能的方法)时,Spring 会检查指定参数的指定目标方法是否已经被调用过,如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。

    1、添加 @EnableCaching

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

    1. @EnableCaching
    2. public class Application {
    3. public static void main(String[] args) {
    4. SpringApplication.run(Application .class, args);
    5. }
    6. }

    2、添加@Cacheable

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

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

    注意:

    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)
    1. @CacheEvict(value = "areaTreeData", allEntries = true, beforeInvocation = true)
    2. public Integer save(SysArea sysArea) {
    3. return mapper.insertSelective(sysArea);
    4. }

    新时代农民工 

  • 相关阅读:
    Day41 力扣动态规划 :121. 买卖股票的最佳时机|122.买卖股票的最佳时机II
    解释器模式:构建领域特定语言的强有力工具
    StringJoiner可以嵌套使用的,简单使用常用于抛异常
    【C++】:类和对象(2)
    资源限制类题目技巧大全
    Task 05 Python操作钉钉自动化
    我的 Kafka 旅程 - 文件存储机制
    openssl3.2 - exp - export ecc pubkey from ecc priv key
    golang 工程组件:grpc-gateway 环境安装+默认网关测试
    大数据必学Java基础(七十七):线程的生命周期和常见方法
  • 原文地址:https://blog.csdn.net/sg_knight/article/details/128117348