spring-data-redis 的序列化問題
阿新 • • 發佈:2018-12-21
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”