目录
1、定义一个RedisConfiguration类
1、继承CachingConfigurerSupport
2、类上方添加两个注解:@Configuration 和 @EnableCaching
3、类里面写redis配置方法
@Configuration
@EnableCaching
public class RedisConfiguration extends CachingConfigurerSupport {
// 放入下面的缓存代码 和 redisTemplate 配置
.....此处省略 ↓↓↓↓↓↓↓↓
}
2、redis默认缓存工具
/**
* 第一种方法
* 选择redis作为默认缓存工具(此种方式使用@Cacheable的时候值是Hex格式)
*
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheManager redisCacheManager = RedisCacheManager.create(factory);
return redisCacheManager;
}
/**
* 第二种方法
* 选择redis作为默认缓存工具(此种方式使用@Cacheable的时候值是json格式)
* 与上面的方法二选一
*/
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer()));
return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
}
3、redisTemplate相关配置
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, String> template = new RedisTemplate<>();
// 配置连接工厂
template.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSeial.setObjectMapper(om);
// 值采用json序列化
//template.setValueSerializer(jacksonSeial);
template.setValueSerializer(new StringRedisSerializer());
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
// 设置hash key 和value序列化模式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jacksonSeial);
template.afterPropertiesSet();
return template;
}