在1.0版本中,咱们配置redis的cacheManager是这种方式:redis
//缓存管理器
@Bean
public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
//设置缓存过时时间
cacheManager.setDefaultExpiration(10000);
return cacheManager;
} //缓存管理器
复制代码
然而在2.0版本中,这个代码直接报错,缘由是RedisCacheManager取消了1.0版本中的public RedisCacheManager(RedisOperations redisOperations)
的这个构造方法,因此咱们没法再用RedisTemplate
做为参数来自定义CacheManager
。spring
下面看一看两个版本的差异:json
RedisCacheWriter
提供了对Redis的set、setnx、get等命令的访问权限,能够由多个缓存实现共享,并负责写/读来自Redis的二进制数据。缓存
RedisCacheConfiguration
根据名字都能想到它是提供redis的配置。springboot
/**
* 缓存管理器
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//初始化一个RedisCacheWriter
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
//设置CacheManager的值序列化方式为json序列化
RedisSerializer<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
.fromSerializer(jsonSerializer);
RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(pair);
//设置默认超过时时间是30秒
defaultCacheConfig.entryTtl(Duration.ofSeconds(30));
//初始化RedisCacheManager
return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
}
复制代码
上面的代码中,还设置了CacheManager
的值序列化方式,因此有了这个配置,能够直接在注解的形式中实现json的redis存储而不用再去多写配置。bash