1. 程式人生 > >spring-data-redis 的序列化問題

spring-data-redis 的序列化問題

Jedis 提供了 string 和 byte[] 型別的函式介面` private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer();

private RedisSerializer keySerializer = null;  
private RedisSerializer valueSerializer = null;  
private RedisSerializer hashKeySerializer = null;  
private RedisSerializer hashValueSerializer = null;  
private RedisSerializer<String> stringSerializer = new StringRedisSerializer();  `

spring-data-redis 中的核心操作類是 RedisTemplate<K, V>

可以看出 key 和 value 都是泛型的,這就涉及到將型別進行序列化的問題了

所就在 RedisTemplate 中還有幾個 RedisSerializer 如果沒有特殊的設定,key 和 value 都是使用 defaultSerializer = new JdkSerializationRedisSerializer(); 進行序列化的。

對於 key = “AAAA” value = “cccc” 的情況, server 端執行的情況如下

“SET” “\xac\xed\x00\x05t\x00\x04AAAA” “\xac\xed\x00\x05t\x00\x04cccc”

“GET” “\xac\xed\x00\x05t\x00\x04AAAA”

如果專案中只使用了string的 key 和 value ,顯然這樣不適合在sever上進行debug

通過下面的配置,可以改成使用StringRedisSerializer對 key 和 value 進行序列化

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"  
      p:connection-factory-ref="jedisConnectionFactory" >  
         <property name="KeySerializer">  
              <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>  
          </property>  
          <property name="ValueSerializer">  
              <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>  
          </property>         
      </bean>  

這樣就能在 server 上找到你原來的 key 了

“SET” “AAAA” “cccc”

“GET” “AAAA”