简而言之
您必须配置串行器。
说明
Redis模板将序列化程序用于键,值和哈希键/值。序列化器用于将Java输入转换为存储在Redis中的表示形式。如果您未进行任何配置,则序列化程序默认为
JdkSerializationRedisSerializer。因此,如果您
key在Java代码中要求输入密钥,则序列化程序会将其转换为
"xacxedx00x05tx00x03key"
Spring Data Redis使用这些字节作为查询Redis的关键字。
您可以使用Spring Data Redis添加数据并使用进行查询
redis-cli:
template.boundSetOps("myKey").add(new Date());然后在
redis-cli
127.0.0.1:6379> keys *1) "xacxedx00x05tx00x05myKey"127.0.0.1:6379> SMEMBERS "xacxedx00x05tx00x05myKey"1) "xacxedx00x05srx00x0ejava.util.Datehjx81x01KYtx19x03x00x00xpwbx00x00x01Nxcf#x9cHx"
如您所见,String和Date被序列化为代表Java序列化对象的一些疯狂字节。
您的代码建议您要存储基于字符串的键和值。只需设置
StringRedisSerializer在你的
RedisTemplate
Java配置
redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());
XML配置
<bean id="stringSerializer" /><bean id="redisTemplate" p:connection-factory-ref="jedisConnectionFactory"> <property name="keySerializer" ref="stringSerializer"/> <property name="valueSerializer" ref="stringSerializer"/></bean><bean id="jedisConnectionFactory" p:host-name="myhostname" p:port="6379"/>
运行代码后的输出如下所示:
valuekey[value]
Spring Data Redis有一些有趣的序列化器,可以在各种系统之间交换消息。您可以从内置的序列化器中选择
- 杰克逊·杰森·雷迪斯序列化器
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer(默认)
- OxmSerializer
- GenericToStringSerializer
或创建自己的。
我使用Spring Data Redis 1.5.1.RELEASE和jedis 2.6.2来验证问题的结果。HTH,马克
进一步阅读:
- Spring Data Redis:序列化器
- 要点包含您的示例



