JSR107

Java Cashing定义了5个核心接口,分别是

  • CashingProvider定义了创建、配置、获取、管理和控制多个CashManager。一个应用可以在运行期间访问多个CashingProvider
  • CashManager定义了创建、配置、获取、管理和控制多个唯一命名的Cashe,这些Cache存在于CasheManager的上下文中,一个CacheManager仅仅被一个CashingProvider所拥有
  • Cache是一个类似Map的数据结构并临时存储以key为索引的值。一个Cache仅仅被一个Cachemanager拥有
  • Entry是一个存储在Cache中的key-value对
  • Expiry每一个存储在Cache中的条目有一个定义的有效期,条目将变为过期状态,只要过期,条目将不可访问、更新和删除。可以通过ExpiryPolicy设置缓存有效期

他们之间的关系如下图所示

Spring保留了CacheManager和Cache来简化开发。CacheManager来管理Cache,Cache来执行增删改查等具体功能

几个重要的概念和缓存注解

@Cacheable具体内容讲解

  • 将方法的运行结果进行缓存;以后要再相同的数据,直接从缓存中获取数据,不再调用方法
  • CacheManager管理多个Cache组件,对于缓存的操作都是在Cache组件中,每一个缓存主键都有自己唯一一个名字;
  • CacheNames/Value:指定缓存主键的名字
  • key:缓存数据使用的key,用它指定,默认是使用方法的参数值,value是方法的返回值
  • keyGenerator:key的生成器,我们可以自己指定key生成器的组件id;但是只可以二选一使用
  • cacheManager:指定缓存的管理器,或者cacheResolver指定获取解析器
  • condition:指定符合条件的情况下,才缓存
  • unless:否定缓存,当unless指定的条件为true,方法的返回值就不会被缓存,可以获取到结果进行判断unless = “#result == null”
  • sync:是否使用异步模式

机制

1,自动配置类CacheCacheAutoConfigConfiguration

2,缓存的配置类

3,哪个配置类生效呢?根据配置规则,如果匹配成功,显示matched;否则显示did not match

4,如果匹配,给容器注册了一个CacheManager

5,可以获取和创建ConcurrentMapCache类型的缓存主键,它将数据保存在ConcurrentMap中

使用缓存的运行流程

  1. 方法运行之前,先去查询缓存cache(缓存组件),按照cacheNames指定的名字获取,CacheManager先获取相应的缓存,如果是第一次操作,缓存组件不存在,cache会自动创建
  2. 去cache中查找缓存的内容,使用是key,默认key是方法传入的参数,key是按照某种策略生成的,默认是使用keyGenerator生成的,默认使用SimpleKeyGenerator生成的key;SimpleKeyGenerator生成的key的默认策略;1,如果没有参数,key=new SimpleKey();2,单个参数,key=参数值;3,多个参数,key=new SimpleKey(params);
  3. 没有查到缓存就调用目标方法
  4. 将目标方法返回的结果,放进缓存

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

@CachePut

  • 既调用方法,又更新缓存(同步同步缓存,前提是取和放的key是同一个key)
  • 修改了数据库的每个数据,同时更新缓存

1,先调用方发

2,将目标的缓存更新到数据库

@Cacheable不能使用#result取回返回结果

@CacheEvict

  1. 当删除数据的时候,清除其对应的缓存
  2. key:指定要清除的数据
  3. allEntries = true;将这个混存所有的数据都删除
  4. @beforeInvocation默认等于false,意思是是否在方法执行之前执行清除缓存数据
  5. @beforeInvocation改为true,代表缓存的清除是在方法运行之前,无论方法的正确与否,都会清除缓存

@Caching可以配置多个复杂规则

  • cachable
  • put
  • evict

Springboot整合缓存相关推荐

  1. 【SpringBoot整合缓存】-----spring-boot-starter-cache篇

    本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的SpringBoot学习步骤,提升工程化编码能力和思维能力,写出高质量代码.希望大家都能够从中有所收 ...

  2. 【SpringBoot整合缓存】-----Redis缓存篇

    本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的SpringBoot学习步骤,提升工程化编码能力和思维能力,写出高质量代码.希望大家都能够从中有所收 ...

  3. SpringBoot整合缓存框架(jetcache、memcached、mykit-cache)

    目录 1.缓存简介 2.应用场景 3.memcache 4.jetcache 4.1 jetcache简介 4.1.2 引入依赖 4.1.3 jetcacje配置 4.1.4 测试项目结构 4.1.5 ...

  4. springboot整合缓存Redis

    请结合springboot学习教程项目github地址 https://github.com/heng1234/spring-boot_one来理解 <!-- 引入 redis 依赖 --> ...

  5. SpringBoot整合(四)整合Ehcache、Redis、Memcached、jetcache、j2cache缓存

    ​ 企业级应用主要作用是信息处理,当需要读取数据时,由于受限于数据库的访问效率,导致整体系统性能偏低. ​ 为了改善上述现象,开发者通常会在应用程序与数据库之间建立一种临时的数据存储机制,该区域中的数 ...

  6. 8分钟带你学会SpringBoot整合Redis来实现缓存技术

    1.概述 随着互联网技术的发展,对技术要求也越来越高,所以在当期情况下项目的开发中对数据访问的效率也有了很高的要求,所以在项目开发中缓存技术使用的也越来越多,因为它可以极大的提高系统的访问速度,关于缓 ...

  7. SpringBoot整合第三方技术学习笔记(自用)

    SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...

  8. springboot整合shiro-关于登出时,redis中缓存没有清理干净的问题

    原文地址,转载请注明出处: https://blog.csdn.net/qq_34021712/article/details/84722724 ©王赛超 如果是跟着我的shiro系列博客敲下来的,其 ...

  9. springboot整合ehcache+redis实现双缓存

    在一些对并发业务要求较高的场景下,对页面数据的响应是个急需解决的问题,对后端来说,ehcache+redis实现双缓存是解决这一问题的不错思路,而且在不少的电商项目中得到了很好的验证,但我在网上搜寻资 ...

最新文章

  1. 存储过程——数据的分页
  2. 直流(DC)跟交流射频(RF)的电场构成
  3. RF无线电射频接口静电保护方案图
  4. python hookapi_pytest文档70-Hook钩子函数完整API总结​
  5. Scala开发教程(16): 没有“break”和“continue”的日子
  6. 中大东校小米路由器mini实现inode上网,ipv6 wifi【中大】【东校】【inode】【ipv6】...
  7. Crystal Report在.net中的两种显示方式
  8. FastAPI 是什么?
  9. Mysql中使用逗号隔开多张表生成的表实例
  10. 4个手机使用必备小常识,没几个人全知道,了解完绝对涨知识
  11. 睡眠不好怎么办?提升睡眠质量的小妙招
  12. 网页中实现图片的毛玻璃效果
  13. 触摸按键PCB设计要点
  14. 应用于流形的卷积网络
  15. Android Key获取方式
  16. 使用python监控NTP系统(时钟服务器)
  17. 报错#vue-router#unknown custom element: <router-link> - did you register the component correctly?
  18. scrapy链接mysql_Scrapy存入MySQL(四):scrapy item pipeline组件实现细节
  19. Linux卸载搜狗输入法
  20. react + zarm + antV F2 实现账单数据统计饼图效果

热门文章

  1. pycharm不同py文件共享参数_PyCharm安装笔记
  2. 【转】关于CLR内存管理一些深层次的讨论[下篇]
  3. 【转】关于Azure存储账户
  4. 关于Xldown和Xlup的用法(Excel VBA)
  5. java解析string_java读取文件内容为string字符串的方法
  6. 如何调整金格电子章服务器印章_重磅!公安部再度认可电子签名、电子印章法律效力!...
  7. 数据结构 - 链表(单向环形链表)(约瑟夫问题)
  8. mysql一对一级联_MySQL 表的一对一、一对多、多对多问题
  9. python response[200_python – django上的代码200 httpresponse
  10. 【蓝桥杯官网试题 -算法训练】素因子去重(数学,数论,因子约数)