为什么要自定义RedisCacheManager
当导入Redis后,SpringBoot不再使用默认的SimpleCacheManager
因为Redis的配置类,会提前注入redisCacheManager
启动应用查询,测试 redis 缓存 employee
成功缓存,但是使用的jdk内置的序列化器,可视化很差
为了能让redis使用我们指定的序列化器,必须自定义cacheManager:
redis的cacheManager的具体结构
构造一个RedisCacheMananger需要一个RedisCacheWriter,一个RedisCacheConfiguration
RedisCacheWriter:
协助使用Redis的底层命令,用于使用缓存的 Remove、Get、Put等方法。
RedisCacheConfiguration:
帮助定制化缓存的一些行为,比如缓存对空值的处理、前缀设置,序列化方式。
可以从defaultCacheConfig()开始,定制化行为。
自定义RedisCacheManager的实现:
@Bean
public CacheManager customizedRedisCacheManager(RedisTemplate redisTemplate){
// 创建一个非锁定的redis缓存写入器,
// 但是这个writer使用redisTemplate中的RedisConnectionFactory作为参数进行构造,
// 并且要求这个构造参数不能为空!
RedisCacheWriter redisCacheWriter = RedisCacheWriter.
nonLockingRedisCacheWriter(Objects.requireNonNull(redisTemplate.getConnectionFactory()));
Jackson2JsonRedisSerializer<Employee> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Employee.class);
RedisSerializationContext redisSerializationContext = RedisSerializationContext.fromSerializer(jsonRedisSerializer);
RedisCacheConfiguration redisCacheConfiguration =RedisCacheConfiguration.
defaultCacheConfig().serializeValuesWith(
redisSerializationContext.getKeySerializationPair());
return new RedisCacheManager(redisCacheWriter,redisCacheConfiguration);
}
重新抽取公共配置以使用自定义的Mananger
@CacheConfig(cacheNames = {"emp"},cacheManager = "customizedRedisCacheManager")
@EnableCaching
@Service
public class EmployeeService {...}