springboot2.x 的 RedisCacheManage
看图,注释掉的是1.X版本中的写法。第二种是2.X中的写法
cache.PNG
配置自定义的key
- 新建配置类 并继承 CachingConfigurerSupport
- 复写并注入 KeyGenerator
- 注入CacheManager
与使用时候再类上或者方法上指定用哪个CacheManager 和KeyGenerator
举例地址github
有三个例子,注释也比较详细。
注意:springboot2.x版本中
配置CacheManager ,注意在2.0中可以用容器自动装配的RedisCacheManager,我们定义(过期)规则,绑定上去即可
//CacheManager
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// 设置缓存有效期
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10));
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}
//自定义Key
@Bean
@Override
public KeyGenerator keyGenerator() {
//内部类
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
//注入的项目名称做为key的一部分【项目名称:全限定类名:方法名称:全部参数】
sb.append(application).append(":").append(target.getClass().getSimpleName()).append(":").append(method.getName());
if (params != null && params.length > 0) {
for (Object p : params) {
sb.append("@").append(p);
}
}
return sb.toString();
}
};
}