Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Obtenha o valor definido do Redis usando o RedisTemplate

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