Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Rufen Sie den Set-Wert von Redis mit RedisTemplate ab

Kurz gesagt

Sie müssen Serialisierer konfigurieren.

Erklärung

Die Redis-Vorlage verwendet Serialisierer für Schlüssel, Werte und Hash-Schlüssel/Werte. Serialisierer werden verwendet, um die Java-Eingabe in die Darstellung zu konvertieren, die in Redis gespeichert ist. Wenn Sie nichts konfigurieren, verwendet der Serializer standardmäßig JdkSerializationRedisSerializer . Wenn Sie also nach einem Schlüssel fragen key in Ihrem Java-Code konvertiert der Serializer ihn in

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

und Spring Data Redis verwendet diese Bytes als Schlüssel zum Abfragen von Redis.

Sie können Daten mit Spring Data Redis hinzufügen und mit redis-cli abfragen :

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

und dann im 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"

Wie Sie sehen, werden der String und das Datum in einige verrückte Bytes serialisiert, die ein Java-serialisiertes Objekt darstellen.

Ihr Code schlägt vor, dass Sie Zeichenfolgen-basierte Schlüssel und Werte speichern möchten. Setzen Sie einfach den StringRedisSerializer in Ihrem RedisTemplate

Java-Konfiguration

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

XML-Konfiguration

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

Die Ausgabe nach dem Ausführen Ihres Codes sieht dann so aus:

value
key
[value]

Spring Data Redis hat einige interessante Serialisierer, die den Nachrichtenaustausch zwischen verschiedenen Systemen ermöglichen. Sie können einen der integrierten Serialisierer auswählen

  • JacksonJsonRedisSerializer
  • Jackson2JsonRedisSerializer
  • JdkSerializationRedisSerializer (Standard)
  • OxmSerializer
  • GenericToStringSerializer

oder erstellen Sie Ihre eigenen.

Ich habe Spring Data Redis 1.5.1.RELEASE und Jedis 2.6.2 verwendet, um das Ergebnis Ihrer Frage zu überprüfen. HTH, Markus

Weiterlesen:

  • Spring Data Redis:Serialisierer
  • Gist mit Ihrem Beispiel