Spring Boot Cache 笔记
2022-12-29 10:57:02 2 举报
AI智能生成
SpringBoot Cache 笔记
作者其他创作
大纲/内容
Caching Data with Spring
Spring boot features Caching
Spring Integration Cache Abstraction
Spring.io
Spring Caching
Spring Boot With Caffeine Cache
Others
参考
org.springframework.cache.Cache
org.springframework.cache.CacheManager
org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer
Spring Cache 抽象接口
org.springframework.boot:spring-boot-starter-cache
Caching LibraryJSR-107 (JCache)
Dependency
Spring Boot 会自动配置一个CacheManager Bean
CacheManager
声明这个类的bean,可以在Spring Boot 初始化 CacheManager 之前进行调整。
CacheManagerCustomizer
a bean of type CacheManager
a CacheResolver named cacheResolver
Bean
强制使用指定类型的cache provider
比如测试环境,通过设置为“none”,禁用cache
type
cache-names
cache
# Only necessary if more than one provider is present
com.acme.MyCachingProvider
provider
classpath:acme.xml
config
jcache
classpath:config/another-config.xml
ehcache
infinispan.xml
infinispan
default
true
cache-null-values
key-prefix
600_000
time-to-live
use-key-prefix
redis
Caffeine Cache 进程缓存之王
将缓存的最大大小定义为500,并且生存时间为 10分钟。
例如
初始缓存长度
initialCapacity=[integer]
驱逐策略
最大缓存长度
当缓存超出这个容量的时候,会使用Window TinyLfu策略来删除缓存。
maximumSize=[long]
最大缓存权重
maximumWeight=[long]
失效策略
最后一次写入或访问后经过固定时间过期
expireAfterAccess=[duration]
最后一次写入后经过固定时间过期
expireAfterWrite=[duration]
刷新策略
创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
必须实现 LoadingCache,否则报错 java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache
跟 expire 的区别是,指定时间过后 expire 是 remove 该 key,下次访问是同步去获取返回新值,而 refresh 则是指定时间后,不会 remove 该 key,下次访问会触发刷新,新值没有回来时返回旧值。
refreshAfterWrite=[duration]
打开key的弱引用
weakKeys
打开value的弱引用
weakValues
打开value的软引用
softValues
开发统计功能
recordStats
参数
如果在load的时候返回null,caffeine将会把对应的key从缓存中删除
同时,loadAll返回的map里是不可以包含value为null的数据,否则将会报NullPointerException
caffeine是不缓存null值的
spec
无界缓存
expireAfterWrite
expireAfterAccess
注意这个API和前面两个API是互斥的。
expireAfter
有界缓存
过期策略
指在设定多长时间后会自动刷新缓存。
refreshAfterWrite
更新策略
expireAfterWrite 和 expireAfterAccess 同时存在时,以 expireAfterWrite 为准。
maximumSize 和 maximumWeight 不可以同时使用
weakValues 和 softValues 不可以同时使用
注意
caffeine
spring
Cache properties
可用于CacheManager,KeyGenerator。
全局配置
使用@CacheConfig。
Class-level 配置
使用注解的属性
Operation-level 配置
缓存配置级别
Configuration
启用缓存注解
@EnableCaching
Spring Boot
触发缓存填充。
cacheNames 别名
value是必需的,它指定了你的缓存存放在哪块命名空间。
value
cacheNames
缓存key的后缀。
支持SpEL表达式
如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合。
key
表示指定key的生成器
与key互斥
keyGenerator
表示指定缓存管理器,包含了缓存策略等相关配置
cacheManager
与cacheManager互斥
cacheResolver
默认是false
同步缓存
当这个属性为true的时候,unless属性是不能使用的。
sync
如果true,则缓存该方法。
如果false,则其行为就好像该方法未被缓存。
条件缓存
指定复合条件的情况下才缓存。
可以通过SpEL表达式进行设置
condition
阻止缓存
当这个条件为true的时候,方法的返回值就不会被缓存。
unless表达式在调用方法后进行计算
unless
properties
此类条件不应依赖于结果对象(即#result变量),因为这些条件需预先验证以确认排除。
@Cacheable
更新缓存而不会干扰方法执行。
此条件不应依赖于结果对象(即#result变量),因为这些条件已预先验证以确认排除
@CachePut
触发缓存逐出。
驱逐缓存中的所有条目
缺省情况下,如果方法执行抛出异常,则不会清空缓存
缺省为 false
如果指定为 true,则在方法还没有执行的时候就清空缓存
allEntries
是否在方法执行前就清空
beforeInvocation
void方法可以与@CacheEvict- 一起使用,因为方法充当触发器,返回值将被忽略(因为它们不与缓存交互)。
@CacheEvict
重新组合要在方法上应用的多个缓存操作。
@Caching
是一个类级别的注释,并有助于简化缓存配置
在 class-level 共享一些通用的 cache-related 配置
@CacheConfig
Spring Cache 使用基于动态生成子类的代理机制来对方法的调用进行切面,如果缓存的方法是内部调用而不是外部引用,会导致代理失败,切面失效。
Spring
@CacheResult
@CacheRemove
@CacheRemoveAll
@CacheDefaults
@CacheKey
@CacheValue
JCache(JSR-107)
Spring vs JSR-107 Annotations
Annotations
通用缓存
Configuration Beans
Generic
org.springframework.cache.jcache.JCacheCacheManager
默认
classpath: ehcache.xml
自定义指定路径
spring.cache.ehcache.config=classpath:config/another-config.xml
Config path
Ehcache 3.x 完全符合 JSR-107 标准,不需要专门的支持。
org.springframework.cache.ehcache.EhCacheCacheManager
org.springframework.cache.ehcache.EhCacheManagerFactoryBean
EhCache 2.x
Hazelcast
infinispan-spring-boot
Infinispan
Couchbase
RedisCacheManager
修改默认配置
RedisCacheConfiguration
更多的自定义配置
RedisCacheManagerBuilderCustomizer
Redis
取代了对Guava的支持
Caffeine 是针对 Guava 缓存的 Java 8 rewrite
com.github.ben-manes.caffeine:Caffeine
org.springframework.cache.caffeine.CaffeineCacheManager
由于是全局配置,因此需要使用泛型,自动配置将忽略任何其他通用类型。
com.github.benmanes.caffeine.cache.CacheLoader
spring.cache.caffeine.spec
com.github.benmanes.caffeine.cache.CaffeineSpec
com.github.benmanes.caffeine.cache.Caffeine
缓存创建顺序
Caffeine
org.springframework.cache.support.SimpleCacheManager
基于ConcurrentHashMap实现的
Simple
禁用缓存
None
Cache Providers
Spring Boot Cache
0 条评论
回复 删除
下一页