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去查询缓存,如果没有就运行方法并将结果放入缓存,以后再来调用就可以直接使用缓存的数据。
spring boot 中 Cache 的使用的更多相关文章
- spring boot(三):Spring Boot中Redis的使用
spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...
- springboot(三):Spring boot中Redis的使用
spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...
- 在Spring Boot中使用数据缓存
春节就要到了,在回家之前要赶快把今年欠下的技术债还清.so,今天继续.Spring Boot前面已经预热了n篇博客了,今天我们来继续看如何在Spring Boot中解决数据缓存问题.本篇博客是以初识在 ...
- Spring Boot:Spring Boot 中 Redis 的使用
Redis 介绍 Redis 是目前业界使用最广泛的内存数据存储.相比 Memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets 等,同时支持数据持久化.除此 ...
- (转)Spring Boot(三):Spring Boot 中 Redis 的使用
http://www.ityouknow.com/springboot/2016/03/06/spring-boot-redis.html Spring Boot 对常用的数据库支持外,对 Nosql ...
- 204. jetcache:在Spring Boot中怎么玩?
[视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源 ...
- 学习Spring Boot:(二十三)Spring Boot 中使用 Docker
前言 简单的学习下怎么在 Spring Boot 中使用 Docker 进行构建,发布一个镜像,现在我们通过远程的 docker api 构建镜像,运行容器,发布镜像等操作. 这里只介绍两种方式: 远 ...
- Spring boot(三)在Spring boot中Redis的使用
spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...
- Spring Boot(三):Spring Boot 中 Redis 的使用
Spring Boot 对常用的数据库支持外,对 Nosql 数据库也进行了封装自动化. Redis 介绍 Redis 是目前业界使用最广泛的内存数据存储.相比 Memcached,Redis 支持更 ...
随机推荐
- iptables详解(1):命令参数解析
1.编辑配置网卡信息方法: 1.1 编辑配置文件:vim /etc/sysconfig/network-scripts/ifcfg-lo 1.2 nmtui命令:图形化配置 1.3 nm-connec ...
- Java环境配置与编译运行详解
这篇文章主要为大家详细介绍了Java环境配置与编译运行的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.开篇 通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印 ...
- C语言中二维数组如何申请动态分配内存
C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc. ...
- 通过python代码连接MySQL以及插入和显示数据
通过python代码连接MySQL以及插入和显示数据: 数据库huahui创建一个shibie的表,里面有两个varcahr(100)的字段,num和result. import pymysql im ...
- 使用python同时替换json多个指定key的value
1.如何同时替换json多个指定key的value import json from jsonpath_ng import parse def join_paths(regx_path,new_val ...
- 开源分布式系统Druid简谈
介绍 Druid是一个拥有大数据实时查询和分析的高容错.高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析.尤其是当发生代码部署.机器故障以及其他产品系统遇到宕机等情况时,Dru ...
- Excel数据可视化方法
目录: Excel图表基础: 1.选择要为其创建图表的数据,如: 2.单击“插入”菜单中的“推荐的图表”(也可点击右下角的下拉箭头),点击后选择所有图表即可查看所有的图标类型 3.选择所要的图表,单击 ...
- postgresql数据库利用函数返回查询结果集
- 洛谷 P1076 寻宝(模拟 && 剪枝)
嗯... 题目链接:https://www.luogu.org/problem/P1076 这道题的题意首先太难理解...并且细节太多... 可以用b[i][j]记录每个指示牌上的数字,a[i][j] ...
- 安卓之滚动视图ScrollView
(1)垂直方向滚动时,layout_width要设置为match_parent,layout_height要设置为wrap_content (2)水平方向滚动时,layout_width要设置为wra ...