序列化策略

  • String 序列化

StringRedisTemplate 默认采用的是 String 的序列化策略,保存的 key 和 value 都是采用此策略序列化保存的。即 StringRedisSerializer

  • JDK 序列化

RedisTemplate 默认采用的是 JDK 的序列化策略,保存的 key 和 value 都是采用此策略序列化保存的。即 JdkSerializationRedisSerializer

  • JacksonJsonRedisSerializer

  • Jackson2JsonRedisSerializer

  • OxmSerializer


可能遇到的问题

因为序列化策略的不同,即使是同一个 key 用不同的 Template 去序列化,结果是不同的。所以根据 key 去进行操作 Redis 中的数据时,就会出现各种操作失败的问题。


解决方案

可以手动指定RedisTemplate的key的序列化策略


<!-- Redis 序列化策略 ,通常情况下 key 值采用 String 序列化策略, -->  

<!-- 如果不指定序列化策略,StringRedisTemplate 的 key 和 value 都将采用 String 序列化策略; -->  

<!-- 但是 RedisTemplate 的 key 和 value 都将采用 JDK 序列化 这样就会出现采用不同 template 保存的数据不能用同一个 template 操作的问题 -->  

<bean id="stringRedisSerializer"   

    class="org.springframework.data.redis.serializer.StringRedisSerializer" />  

  

<bean id='redisWriteTemplate' class="org.springframework.data.redis.core.RedisTemplate">  

    <property name="connectionFactory" ref="jedisWriteConnectionFactory" />  

    <property name="keySerializer" ref="stringRedisSerializer" />  

    <property name="hashKeySerializer" ref="stringRedisSerializer" />  

</bean>  

总结

推荐将所有 Template 的 key 都采用 String 的序列化方式,而 value 的序列化方式可以采用不同的序列化方式。( Jedis 自动选择)(这样还有一个好处就是不必 String 的也采用 JDK 的序列化从而导常用数据格式致为了存储数据结构浪费空间)

参考地址

Last modification:December 8, 2018
If you think my article is useful to you, please feel free to appreciate