Redis
 sql >> Base de données >  >> NoSQL >> Redis

Obtenir la valeur Set de Redis à l'aide de RedisTemplate

En bref

Vous devez configurer les sérialiseurs.

Explication

Le modèle Redis utilise des sérialiseurs pour les clés, les valeurs et les clés/valeurs de hachage. Les sérialiseurs sont utilisés pour convertir l'entrée Java en la représentation stockée dans Redis. Si vous ne configurez rien, le sérialiseur par défaut est JdkSerializationRedisSerializer . Donc si vous demandez une clé key dans votre code Java, le sérialiseur le convertit en

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

et Spring Data Redis utilise ces octets comme clé pour interroger Redis.

Vous pouvez ajouter des données avec Spring Data Redis et les interroger à l'aide de redis-cli :

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

puis dans le 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"

Comme vous le voyez, la chaîne et la date sont sérialisées en quelques octets fous qui représentent un objet sérialisé Java.

Votre code suggère que vous souhaitiez stocker des clés et des valeurs basées sur une chaîne. Définissez simplement le StringRedisSerializer dans votre RedisTemplate

Configuration Java

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

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

La sortie après l'exécution de votre code ressemble alors :

value
key
[value]

Spring Data Redis possède des sérialiseurs intéressants qui permettent l'échange de messages entre différents systèmes. Vous pouvez choisir parmi les sérialiseurs intégrés

  • JacksonJsonRedisSerializer
  • Jackson2JsonRedisSerializer
  • JdkSerializationRedisSerializer (par défaut)
  • OxmSerializer
  • GenericToStringSerializer

ou créez le vôtre.

J'ai utilisé Spring Data Redis 1.5.1.RELEASE et jedis 2.6.2 pour vérifier le résultat de votre question. HTH, Marc

Lire plus :

  • Spring Data Redis :sérialiseurs
  • Gist contenant votre exemple