自定义redisTemplate
一个通用模版,主要配置了key,value,hashkey,hashvalue的序列化方式
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @author orange
*/
@Configuration
@Slf4j
public class RedisConfiguration {
// 自己定义了一个redisTemplate
@Bean
@SuppressWarnings("all") // 用于压制一些不重要或者无法避免的警告
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<String,Object>();
//设置redis的连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
/**
* 1.设置了 ObjectMapper 的可见性,使其可以访问所有字段,包括私有字段。
* 2.启用了默认的类型信息,这意味着在序列化和反序列化时,会将类的完全限定名(包括包名)写入 JSON 字符串中,以便在反序列化时可以正确地恢复对象的类型。
*/
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// 设置key的序列化方式
redisTemplate.setKeySerializer(stringRedisSerializer);
// 设置value的序列化方式
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 设置hashkey的序列化方式
redisTemplate.setHashKeySerializer(stringRedisSerializer);
// 设置hashvalue的序列化方式
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
// 将所有的设置加载到配置中
redisTemplate.afterPropertiesSet();
// 返回redisTemplate对象
return redisTemplate;
}
}