尝试使用SpringCache + redis 实现注解缓存时,遇到如题问题,核心代码如下
@Configuration 配置下的KeyGenerator
@Bean
public KeyGenerator customKeyGenerator() {
return (o, method, objects) -> {
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName()); //获取访问路径全名
log.info("访问路径名:" + o.getClass().getName());
sb.append(":").append(method.getName());//获取访问方法名
log.info("访问方法名:" + method.getName());
for (Object object : objects) {
if (ObjectUtils.isNotEmpty(object)) {
sb.append(":").append(object.toString());
}
}
return sb.toString();
};
}
@Configuration 配置下的 cacheManager
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(6))//过期时间 使用Duration,可设置类型
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericFastJsonRedisSerializer()))//value 序列化 或 GenericJackson2JsonRedisSerializer .disableCachingNullValues();//不允许存储空值
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.transactionAware()
.build();
}
用法如下
日志打印如下
对,你没有看错,我发一次请求,执行了四次,原因尚未明确,请问是否有遇到过该问题的人,希望能解答下
注:包版本如下
org.springframework.boot:spring-boot-starter-cache:2.3.5.RELEASE
右边栏相似问题,直接弹出一个几乎一摸一样的问题,而且楼主已经把问题和解决方案解释的非常清楚了,是
shiro-spring-boot-starter
依赖下动态代理类DefaultAdvisorAutoProxyCreator
引发的具体解释查看这个问题 SpirngBoot 整合 Shiro + Redis 时出现缓存 EnhancerBySpringCGLIB 代理重复生成问题