RedisTemplate对jedis进行了再一次的封装。使用起来更加的简洁方便。但是也是一些问题。比如序列化的问题。在存储数据的时候。可能会导致value值乱码。或者key乱码,这是由于redis内部的原因;
而在存储对象的时候。通常我们工程采用第三方工具如FastJson作为转换。为达到序列与反序列一致性。需要对RedisTemplate进行配置
一、配置我们自己的序列化方案,重写RedisSerializer接口并配置
// 自定义redis存储数据对象序列化。整个工程采用JSON作为序列化工具
public class ObjectRedisSerializer<T> implements RedisSerializer<T> {
private final Charset charset;
public ObjectRedisSerializer() {
this(StandardCharsets.UTF_8);
}
public ObjectRedisSerializer(Charset charset) {
Assert.notNull(charset, "Charset must not be null!");
this.charset = charset;
}
//序列化
@Override
public byte[] serialize(T t) throws SerializationException {
String jsonString = JSON.toJSONString(t);
jsonString.getBytes(this.charset);
return jsonString.getBytes();
}
//反序列化
@Override
public T deserialize(byte[] bytes) throws SerializationException {
return bytes == null ? null : JSON.parseObject(new String(bytes, this.charset), new TypeReference<T>() {});
}
}
二、配置RedisTemplate操作
@Bean
public RedisTemplate<String, Object> stringSerializerRedisTemplate(@Autowired RedisTemplate redisTemplate) {
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
ObjectRedisSerializer<Object> objectRedisSerializer = new ObjectRedisSerializer<>();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(objectRedisSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(objectRedisSerializer);
return redisTemplate;
}