spring-data-redis注册fastjson序列化工具

时间:2024-07-30 13:34:20

  使用spring-data-redis的时候,其序列化工具自带:

aaarticlea/png;base64,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" alt="" />

这些类,进行序列化,主要使用的是Jackson2JsonRedisSerializer,编码如下:

  

  @Bean
  @SuppressWarnings({ "rawtypes", "unchecked" })
public Jackson2JsonRedisSerializer jackson2JsonRedisSerializer() {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
return jackson2JsonRedisSerializer;
} @Bean
@SuppressWarnings("rawtypes")
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory, RedisSerializer fastJson2JsonRedisSerializer) {
StringRedisTemplate template = new StringRedisTemplate(factory); template.setValueSerializer(fastJson2JsonRedisSerializer); template.afterPropertiesSet();
return template;
}

但是使用jackson会有一个问题,因为我springMVC同样是使用的jackson,这样的话由于一些发送给前端的json是需要一定的处理的,如jsonIgnore之类的,这样会在进行缓存时同样处理掉,达不到缓存的目的,于是决定在spring-data-redis进行缓存时,将jackson的序列化由fastjson替换掉。

  首先需要一个RedisSerializer:

public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {

    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

    private Class<T> clazz;

    public FastJson2JsonRedisSerializer(Class<T> clazz) {
super();
this.clazz = clazz;
} public byte[] serialize(T t) throws SerializationException {
if (t == null) {
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
} public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
return null;
}
String str = new String(bytes, DEFAULT_CHARSET); return (T) JSON.parseObject(str, clazz);
} }

   此类需要实现RedisSerializer接口。

  然后set到RedisTemplate上:

  

    @Bean
@SuppressWarnings("rawtypes")
public RedisSerializer fastJson2JsonRedisSerializer() {
return new FastJson2JsonRedisSerializer<Object>(Object.class);
} @Bean
@SuppressWarnings("rawtypes")
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory, RedisSerializer fastJson2JsonRedisSerializer) {
StringRedisTemplate template = new StringRedisTemplate(factory); template.setValueSerializer(fastJson2JsonRedisSerializer); template.afterPropertiesSet();
return template;
}

  结束