RedisTemplate對jedis進行了再一次的封裝。使用起來更加的簡潔方便。但是也是一些問題。比如序列化的問題。在存儲數(shù)據(jù)的時候??赡軙е聉alue值亂碼。或者key亂碼,這是由于redis內(nèi)部的原因;
而在存儲對象的時候。通常我們工程采用第三方工具如FastJson作為轉(zhuǎn)換。為達到序列與反序列一致性。需要對RedisTemplate進行配置
一、配置我們自己的序列化方案,重寫RedisSerializer接口并配置
// 自定義redis存儲數(shù)據(jù)對象序列化。整個工程采用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;
}