zoukankan      html  css  js  c++  java
  • spring boot 中 Cache 的使用

    参考:https://blog.csdn.net/qq_38974634/article/details/80650810

     一、JSR107

    Java Caching 定义5个核心的接口,分别是CachingProvider、CacheManager、Cache、Entity 和 Expiry

    1.CachingProvider 定义了创建、配置、获取、管理和控制多个CacheManager ,一个应用可以在运行期间访问多个CachingProvider.

    2.CacheManager 定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache 存在于CacheManager 的上下文,一个CacheManager 仅被一个CachingProvider 所拥有。

    3.Cache 是一个类似Map 的数据结构并临时存储以key 为索引的值。一个cache 仅被一个 cacheManager 所拥有。

    4.Entitry 是一个存储在Cache 中的 key-value 对

    5.Expiry 每一个存储在 Cache 中的条目有一个定义的有效期。一旦超过这个时间,条目为过期状态。一旦过期,条目将不可访问、更新、删除。缓存有效期可以通过ExpiryPolicy 设置。

    二、Spring 缓存抽象

    Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术。并支持使用 JCache (JSR-107) 

    注解简化开发。

    1. Cache 接口下 Spring 提供了各种 xxxCache 的实现,如 RedisCache,EhCache,ConcurrentMapCache 等。每次调用需要缓存功能的方法时,

     Spring 会检查指定参数的的指定的目标方法是否已经被调用过。 如果有就直接从缓存中获取方法调取后的结果。如果没有就调用方法并缓存

     结果返回给用户。下次直接从缓存中获取。

    2. 使用缓存,需要注意

      (1).确定方法需要被缓存以及他们的缓存策略

      (2).从缓存中读取之前缓存的数据

    三、缓存注解

    同样支持 SPEL 表达式

    四、缓存的使用

    1.导入 spring-boot-starter-cache

    2.@EnableCaching 开启缓存

    3.使用缓存注解

    @Cacheable 能够根据方法的请求参数对其进行缓存 

      cacheNames 缓存的名称,听过缓存的名称来标识不同的组件

    @CachePut  即调用方法,同时更新数缓存数据,操作玩该方法后将返回值更新到缓存

    @CacheEvict  清除缓存  key 指定要清除的缓存  allEntries=true 指定清除缓存中的所有数据,beforeInvocation=false 缓存的清除是否再方法之前前

    //@CachePut 刷新数据,前判断数据是存在的,否则缓存可能刷新出数据库不存在的数据

    五、spring boot 中默认的缓存

    1.将方法的运行结果进行缓存,cacheManager 管理多个cache 组件,对缓存的真正CURD 操作在Cache 组件中,每个缓存组件都有自己唯一的名字。

    2.断点跟踪默认配置

     默认SimpleCacheConfiguration 生效

    3.给容器注册一个CacheManager  : ConcurrentMapCacheManager

    4.获取和创建 ConcurrentMapCache 类型的缓存组件,作用是将数据保存在ConcurrentMap中。

    5.运行流程: 方法运行前,先去查询 Cache(缓存组件),按照 CacheNames 指定的名字获取,第一次回去缓存如果没有Cache 组件会自动创建;

    去Cache 中查询缓存的内容,使用一个key ,默认的就是方法的参数,key 是按照某种策略生成的。默认是使用 keyGenerator 生成的,默认使用SimpleKeyGenerator 生成key.

    SimpleKeyGenerator 生成的key 的默认策略:如果没有参数Lkey = new SimpleKey(); 如果有一个参数: key = 参数的值;如果有多个参数: key = new SimpleKey(params);

    没有查询到缓存就调用目标方法,将目标方法返回值放入缓存。

    @Cacheable 标注的方法执行之前先来检查缓存中有没有这个数据,默认按照参数值作为key去查询缓存,如果没有就运行方法并将结果放入缓存,以后再来调用就可以直接使用缓存的数据。

  • 相关阅读:
    数据库字段太多,批量快速建立实体类方法(适合大量字段建立实体类)
    SQL service 中的 ”输入SQL命令窗口“ 打开了 “属性界面” 回到 ”输入SQL命令窗口“
    计算机软件编程英语词汇集锦
    编程常用英语词汇
    svn上传和下载项目
    当启动tomcat时出现tomcat setting should be set in tomcat preference page
    Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
    eclipse中选中一个单词 其他相同的也被选中 怎么设置
    Spring Boot的@SpringBootApplication无法引入的问题
    最全的SpringCloud视频教程
  • 原文地址:https://www.cnblogs.com/baizhuang/p/11357161.html
Copyright © 2011-2022 走看看