Redis
 sql >> Database >  >> NoSQL >> Redis

Ottieni il valore impostato da Redis usando RedisTemplate

In breve

Devi configurare i serializzatori.

Spiegazione

Il modello Redis utilizza serializzatori per chiavi, valori e chiavi/valori hash. I serializzatori vengono utilizzati per convertire l'input Java nella rappresentazione archiviata in Redis. Se non configuri nulla, il serializzatore predefinito è JdkSerializationRedisSerializer . Quindi se chiedi una chiave key nel codice Java, il serializzatore lo converte in

"\xac\xed\x00\x05t\x00\x03key"

e Spring Data Redis usa quei byte come chiave per interrogare Redis.

Puoi aggiungere dati con Spring Data Redis ed eseguirne una query utilizzando redis-cli :

template.boundSetOps("myKey").add(new Date());

e poi nel 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"

Come puoi vedere, la stringa e la data sono serializzate in alcuni byte pazzi che rappresentano un oggetto serializzato in Java.

Il codice suggerisce di voler archiviare chiavi e valori basati su stringhe. Basta impostare StringRedisSerializer nel tuo RedisTemplate

Configurazione Java

redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());

Configurazione 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"/>

L'output dopo aver eseguito il codice è simile a:

value
key
[value]

Spring Data Redis ha alcuni serializzatori interessanti che consentono lo scambio di messaggi tra vari sistemi. Puoi scegliere tra i serializzatori integrati

  • JacksonJsonRedisSerializer
  • Jackson2JsonRedisSerializer
  • JdkSerializationRedisSerializer (predefinito)
  • OxmSerializzatore
  • GenericToStringSerializer

o creane uno tuo.

Ho usato Spring Data Redis 1.5.1.RELEASE e jedis 2.6.2 per verificare il risultato della tua domanda. HTH, Marco

Leggi ulteriormente:

  • Redis dei dati di primavera:serializzatori
  • Gist contenente il tuo esempio