我用spring-data-redis 成功的set了 而且也能成功get出来对应的数据~
但是用redis-cli去服务器直接get数据是提示(nil) 这是什么原因啊?
正常是get一个不存在的key才会这样的
突然想起spring-data-redis 对 key 和 value 都进行了序列化 变成byte[] 再调用对应的redis java client进行存储的。 那应该就是通过spring-data-redis进入redis的key变了
原因其实就出现在这里,解决的办法就是手动定义序列化的方法,spring-data-redis中还提供了一个序列化的类专门针对string类型的序列化org.springframework.data.redis.serializer.StringRedisSerializer这个类,可以在xml里面指定:
<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" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
</bean>
如果没有特殊的设置,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 进行序列化