前提纪要:因为业务变动,需要在原先只支持protobuf的前提序列化的前提下,新增正常的序列化读取数据所以在原先的基础上进行优化。文章用于记忆。
话不多说直接上代码
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
@Import({RedisAutoConfiguration.class})
@Slf4j
public class ProtobufRedisTemplateConfig {
private final LettuceConnectionFactory lettuceConnectionFactory;
public ProtobufRedisTemplateConfig (LettuceConnectionFactory lettuceConnectionFactory) {
this.lettuceConnectionFactory = lettuceConnectionFactory;
}
@Bean
public RedisTemplate<Object, Object> protobufRedisTemplate() {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
RedisSerializer<byte[]> byteRedisSerializer = new RedisSerializer<byte[]>() {
@Override
public byte[] serialize(byte[] bytes) throws SerializationException {
return new byte[0];
}
@Override
public byte[] deserialize(byte[] bytes) {
return bytes;
}
};
template.setKeySerializer(byteRedisSerializer);
template.setValueSerializer(byteRedisSerializer);
template.setHashKeySerializer(byteRedisSerializer);
template.setHashValueSerializer(byteRedisSerializer);
template.afterPropertiesSet();
log.warn("the Lettuce-protobuf starting success, date is -->" + new Date());
return template;
}
@Bean
public RedisTemplate<String, Object> jsonRedisTemplate() {
RedisTemplate redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
// 使用Jackson2JsonRedisSerializer 替换默认的JDKSerializationRedisSerializer 来序列化和反序列化redis 的value值
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
// hash的value序列化方式采用jackson
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
使用
@Autowired
@Qualifier("protobufRedisTemplate")
private RedisTemplate<Object, Object> protobufRedisTemplate;
@Autowired
@Qualifier("jsonRedisTemplate")
private RedisTemplate<String, Object> redisTemplate;