Skip to content

缓存组件

缓存组件,是在spring-boot-starter-cache的基础上,做了功能的增强,可以支持多种缓存管理器并存,并且针对不同缓存内容的独立配置失效策略,maven坐标如下:

xml
<dependency>
    <groupId>cn.zjtele.pubinfo.boot</groupId>
    <artifactId>pubinfo-boot-starter-cache</artifactId>
</dependency>

使用说明

常用的缓存管理器,有caffeineredis,考虑不是所有项目都有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缓存组件,只能统一配置缓存的实效策略,但是实际业务中,不同的缓存内容,失效时间往往是不一样的。例如配置信息不常更新,缓存失效时间较长,而排行榜的缓存失效时间较短。针对这种情况,我们重新实现了CaffeineCacheManagerRedisCacheManager,从而支持为不同的缓存内容配置不同的失效策略。具体配置如下:

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清除缓存时,caffeineredis缓存组件,支持根据缓存key值模糊匹配清除。示例如下:

java
@CacheEvict(cacheNames = {"granted_permissions","granted_resources","granted_roles"},key = "#userId+'*'")
public void deleteUser(String userId) {
    ....
}

支持的通配符有

  • *:多个字符
  • ?:一个字符
  • []:括号内的某1个字符