En resumen
Tienes que configurar serializadores.
Explicación
La plantilla de Redis usa serializadores para claves, valores y claves/valores hash. Los serializadores se utilizan para convertir la entrada de Java en la representación que se almacena en Redis. Si no configura nada, el serializador predeterminado es JdkSerializationRedisSerializer
. Entonces, si solicita una clave key
en su código Java, el serializador lo convierte en
"\xac\xed\x00\x05t\x00\x03key"
y Spring Data Redis usa esos bytes como la clave para consultar Redis.
Puede agregar datos con Spring Data Redis y consultarlos usando redis-cli
:
template.boundSetOps("myKey").add(new Date());
y luego en el 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 puede ver, la cadena y la fecha se serializan en algunos bytes locos que representan un objeto serializado en Java.
Su código sugiere que desea almacenar claves y valores basados en cadenas. Simplemente configure el StringRedisSerializer
en su RedisTemplate
Configuración Java
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
Configuración 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"/>
El resultado después de ejecutar su código se ve así:
value
key
[value]
Spring Data Redis tiene algunos serializadores interesantes que permiten el intercambio de mensajes entre varios sistemas. Puede elegir cualquiera de los serializadores integrados
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (predeterminado)
- Serializador Oxm
- GenericToStringSerializer
o crea el tuyo propio.
Usé Spring Data Redis 1.5.1.RELEASE y jedis 2.6.2 para verificar el resultado de su pregunta. HTH, Marcos
Leer más:
- Spring Data Redis:serializadores
- Gist que contiene su ejemplo