1、使用方式
接口或方法上使用
@Cacheable(value = "list#3600", key = "#user.id")
3600 指ttl时常
@CacheEvict(value = "list", allEntries = true)
2、配置步骤
2.1 定义自己的RedisCacheManager
public class CustomRedisCacheManager extends RedisCacheManager {
public CustomRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {
super(cacheWriter, defaultCacheConfiguration);
}
@Override
protected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfig) {
String[] array = StringUtils.delimitedListToStringArray(name, "#");
name = array[0];
if(array.length>1) {
long ttl = Long.parseLong(array[1]);
cacheConfig = cacheConfig.entryTtl(Duration.ofSeconds(ttl));
}
return super.createRedisCache(name, cacheConfig);
}
}
2.2 定义Bean
@Bean
public RedisCahceManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
return new CustomRedisCacheManager(
RedisCacheWriter.lockingRedisCacheWriter(redisConnectionFactory),
this.getRedisCacheConfigurationWithTtl(-1)
);
}
private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(RedisSerializationContext.java().getValueSearializationPair())
.entryTtl(Duration.ofSeconds(seconds)));
return redisCacheConfiguration;
}
3、注意
这里不使用其他的序列化处理器,估使用该配置的方法或接口返回结果要implements Serializable