主题
缓存组件
缓存组件,是在spring-boot-starter-cache的基础上,做了功能的增强,可以支持多种缓存管理器并存,并且针对不同缓存内容的独立配置失效策略,maven坐标如下:
xml
<dependency>
<groupId>cn.zjtele.pubinfo.boot</groupId>
<artifactId>pubinfo-boot-starter-cache</artifactId>
</dependency>
使用说明
常用的缓存管理器,有caffeine
和redis
,考虑不是所有项目都有redis组件,我们在pubinfo-boot-starter-cache中,默认引入了caffeine。所以引入了pubinfo-boot-starter-cache组件后,可以直接使用caffeine缓存组件。如果需要redis作缓存,引入redis组件即可,示例如下:
xml
<dependency>
<groupId>cn.zjtele.pubinfo.boot</groupId>
<artifactId>pubinfo-boot-starter-redis</artifactId>
</dependency>
然后,使用与原生spring缓存一样,通过@EnableCaching
启动缓存,通过@Cacheable
、@CacheEvict
、@CachePut
、@Caching
完成缓存的生成、清除等操作。
多缓存管理器
spring原生的缓存组件,默认只支持一个缓存管理器,我们通过重新实现org.springframework.cache.annotation.CachingConfigurerSupport
,按照一定优先级,返回默认的缓存管理器,避免多缓存管理器的冲突。这样在@Cacheable
、@CacheEvict
、@CachePut
、@Caching
相关注解中,未指定cacheManager
时,走默认的缓存管理器,如果指定了则走指定的缓存管理器。
提示
默认缓存管理器优先级如下:
1.通过spring.cache.type
指定的缓存管理器优先级最高。
2.如果未指定,REDIS
> CAFFEINE
> SIMPLE
,优先级依次降低。
上述优先级,是在同时存在多个缓存管理器时的顺序,如果只有一个缓存管理器,则该缓存管理器为默认管理器。
失效策略配置
默认的spring缓存组件,只能统一配置缓存的实效策略,但是实际业务中,不同的缓存内容,失效时间往往是不一样的。例如配置信息不常更新,缓存失效时间较长,而排行榜的缓存失效时间较短。针对这种情况,我们重新实现了CaffeineCacheManager
和RedisCacheManager
,从而支持为不同的缓存内容配置不同的失效策略。具体配置如下:
yaml
pubinfo:
cache:
config-map:
# 默 认缓存配置
default:
caffeine:
spec: maximumSize=500,expireAfterAccess=600s
reids:
time-to-live: 600s
# c acheName为cacheName1的缓存配置
cacheName1:
# 具 体配置与原生caffeine配置一样
caffeine:
spec: maximumSize=500,expireAfterAccess=600s
# c acheName为cacheName2的缓存配置
cacheName2:
# 具 体配置与原生redis配置一样
redis:
time-to-live: 600s
模糊匹配清除
通过@CacheEvict
清除缓存时,caffeine
和redis
缓存组件,支持根据缓存key值模糊匹配清除。示例如下:
java
@CacheEvict(cacheNames = {"granted_permissions","granted_resources","granted_roles"},key = "#userId+'*'")
public void deleteUser(String userId) {
....
}
支持的通配符有
*
:多个字符?
:一个字符[]
:括号内的某1个字符