SpringBoot高级--缓存--Spring缓存抽象

在这里插入图片描述
SpringBoot高级--缓存--Spring缓存抽象_第1张图片
@Cacheable:触发缓存人口。
@CacheEvict:触发缓存驱逐。 缓存清楚
@CachePut:在不影响方法执行的情况下更新缓存。访问方法并更新缓存
@Caching:重新组合要应用于方法的多个缓存操作。
@CacheConfig:在类级别上共享一些常见的缓存相关设置

使用步骤

1、在springboot主类中加入**@EnableCaching**注解支持
SpringBoot高级--缓存--Spring缓存抽象_第2张图片
2、在方法级别增加 @Cacheable 注解支持以启用缓存
在这里插入图片描述
Cacheable的几个属性
cacheNames/value:指定缓存组件的名字;将方法的返回结果放在哪个缓存中,是数组的方式,可以指定多个缓存;
key:缓存数据使用的key;可以用它来指定。默认是使用方法参数的值1-方法的返回值
编写SpEL; #id;参数id的值#a0、#pθ、#root.args[e]
keyGenerator: key的生成器; 可以自己指定key的生成器的组件id
key/keyGenerator:二选一使用
cacheManager:指定缓存管理器;或者cacheResol ver指定获取解析器
condition:指定符合条件的情况下才缓存;
condition = “#id>0”
condition = “#a0>1”: 第一个参数的值>1的时候才进行缓存
unless:否定缓存;当unless指定的条件为true,方法的返回值就不会被缓存;可以获取到结果进行判断
unless = "#result == null ”
unless = “#a0==2”:如果第一 个参数的值是2,结果不缓存;
sync:是否使用异步模式
注意:开启了异步就不支持unless
SpringBoot高级--缓存--Spring缓存抽象_第3张图片
3、自动配置类CacheAutoConfiguration
SpringBoot高级--缓存--Spring缓存抽象_第4张图片

包含以下这些类:
GenericCacheConfiguration
EhCacheCacheConfiguration
HazelcastCacheConfiguration
InfinispanCacheConfiguration
JCacheCacheConfiguration
CouchbaseCacheConfiguration
RedisCacheConfiguration
CaffeineCacheConfiguration
SimpleCacheConfiguration
NoOpCacheConfiguration
SpringBoot高级--缓存--Spring缓存抽象_第5张图片

默认加载:SimpleCacheConfiguration
这个类注册了一个 ConcurrentMapCacheManager 缓存管理器
SpringBoot高级--缓存--Spring缓存抽象_第6张图片
缓存管理器最主要功能就是根据缓存名字查询缓存对象
实现了CacheManager, BeanClassLoaderAware接口,定义一个缓存队列为
private final ConcurrentMap cacheMap = new ConcurrentHashMap<>(16);
可以获取和创建ConcurrentMapCache类型的缓存组件
SpringBoot高级--缓存--Spring缓存抽象_第7张图片
ConcurrentMapCache组件最主要的逻辑就是这个lookup查询逻辑
SpringBoot高级--缓存--Spring缓存抽象_第8张图片
我们看一下这个store是什么,估测是个存储对象,看一下吧
在这里插入图片描述
SpringBoot高级--缓存--Spring缓存抽象_第9张图片
ok,看,是Map存储的

Cacheable的运行流程

SpringBoot高级--缓存--Spring缓存抽象_第10张图片

在这里插入图片描述
在这里插入图片描述

@CacheEvict注解

SpringBoot高级--缓存--Spring缓存抽象_第11张图片

@Caching注解

SpringBoot高级--缓存--Spring缓存抽象_第12张图片

@CacheConfig注解

统一指定公共的缓存配置
在这里插入图片描述

你可能感兴趣的:(Java,缓存,spring,java)