Resumindo
Você tem que configurar serializadores.
Explicação
O modelo Redis usa serializadores para chaves, valores e chaves/valores de hash. Os serializadores são usados para converter a entrada Java na representação armazenada no Redis. Se você não configurar nada, o padrão do serializador será
JdkSerializationRedisSerializer
. Então, se você pedir uma chave key
em seu código Java, o serializador o converte para "\xac\xed\x00\x05t\x00\x03key"
e o Spring Data Redis usa esses bytes como a chave para consultar o Redis.
Você pode adicionar dados com Spring Data Redis e consultá-los usando o
redis-cli
:template.boundSetOps("myKey").add(new Date());
e então no
redis-cli
127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x05myKey"
127.0.0.1:6379> SMEMBERS "\xac\xed\x00\x05t\x00\x05myKey"
1) "\xac\xed\x00\x05sr\x00\x0ejava.util.Datehj\x81\x01KYt\x19\x03\x00\x00xpw\b\x00\x00\x01N\xcf#\x9cHx"
Como você vê, a String e a Data são serializadas em alguns bytes malucos que representam um objeto serializado em Java.
Seu código sugere que você deseja armazenar chaves e valores baseados em String. Basta definir o
StringRedisSerializer
em seu RedisTemplate
Configuração Java
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
Configuração XML
<bean id="stringSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jedisConnectionFactory">
<property name="keySerializer" ref="stringSerializer"/>
<property name="valueSerializer" ref="stringSerializer"/>
</bean>
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="myhostname" p:port="6379"/>
A saída depois de executar seu código se parece com:
value
key
[value]
O Spring Data Redis possui alguns serializadores interessantes que permitem a troca de mensagens entre vários sistemas. Você pode escolher entre os serializadores integrados
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (padrão)
- OxmSerializer
- GenericToStringSerializer
ou crie o seu próprio.
Usei Spring Data Redis 1.5.1.RELEASE e jedis 2.6.2 para verificar o resultado da sua pergunta. HTH, Marcos
Leia mais:
- Spring Data Redis:serializadores
- Gist contendo seu exemplo