Skip to content

在团队中使用注解缓存不能够像代码一样通过枚举类等方式限定Key的指定,那么我们通过配置的方式限定Key的默认构成,通过反射获取类名、方法名和参数名称共同组成key。

java
import org.springframework.cache.interceptor.KeyGenerator;

/**
  * 自定义缓存Key规则
  * @return
*/
@Bean
public KeyGenerator springCacheDefaultKeyGenerator(){
    // 类名_方法名_参数名称
    return new KeyGenerator() {
        @Override
        public Object generate(Object o, Method method, Object... objects) {
            return o.getClass().getSimpleName() + "_"
                + method.getName() + "_"
                + StringUtils.arrayToDelimitedString(objects, "_");
        }
    };
}

使用:

java
// @Cacheable(value = {"product_page"},key = "#root.methodName+'_'+#page+'_'+#size") // 默认一天
@Cacheable(value = {"product_page"},keyGenerator = "springCacheDefaultKeyGenerator") // 默认一天
public IPage<ProductDO> page(int page, int size) {
    Page<ProductDO> pageInfo = new Page<>(page, size);
    return productMapper.selectPage(pageInfo, null);
}