sql >> Database >  >> NoSQL >> Redis

Ontvang de ingestelde waarde van Redis met RedisTemplate

Kortom

U moet serializers configureren.

Uitleg

De Redis-sjabloon gebruikt serializers voor sleutels, waarden en hash-sleutels/waarden. Serializers worden gebruikt om de Java-invoer om te zetten in de representatie die is opgeslagen in Redis. Als u niets configureert, wordt de serializer standaard ingesteld op JdkSerializationRedisSerializer . Dus als u om een ​​sleutel key vraagt in uw Java-code, converteert de serializer deze naar

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

en Spring Data Redis gebruikt die bytes als de sleutel om Redis op te vragen.

U kunt gegevens toevoegen met Spring Data Redis en deze opvragen met behulp van de redis-cli :

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

en dan in de 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"

Zoals je ziet, zijn de String en de Datum geserialiseerd in een aantal gekke bytes die een Java-geserialiseerd object vertegenwoordigen.

Uw code suggereert dat u op tekenreeksen gebaseerde sleutels en waarden wilt opslaan. Stel gewoon de StringRedisSerializer . in in uw RedisTemplate

Java-configuratie

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

XML-configuratie

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

De uitvoer na het uitvoeren van uw code ziet er als volgt uit:

value
key
[value]

Spring Data Redis heeft een aantal interessante serializers waarmee berichten tussen verschillende systemen kunnen worden uitgewisseld. U kunt kiezen uit de ingebouwde serializers

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

of maak je eigen.

Ik heb Spring Data Redis 1.5.1.RELEASE en jedis 2.6.2 gebruikt om het resultaat van uw vraag te verifiëren. HTH, Mark

Lees verder:

  • Spring Data Redis:Serializers
  • Samenvatting met uw voorbeeld


  1. Redis vs. Memcached – 2021 Vergelijking

  2. Hoe moet ik Booksleeve gebruiken met protobuf-net?

  3. Vind documenten met arrays die geen document bevatten met een bepaalde veldwaarde in MongoDB

  4. mongo - kon geen verbinding maken met server 127.0.0.1:27017