sql >> Base de Datos >  >> NoSQL >> Redis

Obtenga el valor establecido de Redis usando RedisTemplate

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