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

Pourquoi les données sont-elles stockées avec des clés étranges dans Redis lors de l'utilisation de Jedis avec Spring Data ?

Ok, j'ai cherché sur Google pendant un moment et j'ai trouvé de l'aide sur http://java.dzone.com/articles/spring-data-redis.

C'est arrivé à cause de la sérialisation Java.

Le sérialiseur de clé pour redisTemplate doit être configuré sur StringRedisSerializer c'est-à-dire comme ceci :

<bean 
    id="jedisConnectionFactory" 
    class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 
    p:host-name="${redis.server}" 
    p:port="${redis.port}" 
    p:use-pool="true"/>

<bean 
    id="stringRedisSerializer" 
    class="org.springframework.data.redis.serializer.StringRedisSerializer"/>

<bean 
    id="redisTemplate" 
    class="org.springframework.data.redis.core.RedisTemplate"
    p:connection-factory-ref="jedisConnectionFactory" 
    p:keySerializer-ref="stringRedisSerializer"
    p:hashKeySerializer-ref="stringRedisSerializer" 
/>

Maintenant, la clé dans redis est vc:501381 .

Ou comme le dit @niconic, nous pouvons également définir le sérialiseur par défaut lui-même sur le sérialiseur de chaîne comme suit :

<bean 
    id="redisTemplate" 
    class="org.springframework.data.redis.core.RedisTemplate"
    p:connection-factory-ref="jedisConnectionFactory" 
    p:defaultSerializer-ref="stringRedisSerializer"
/>

ce qui signifie que toutes nos clés et valeurs sont des chaînes. Notez cependant que cela n'est peut-être pas préférable, car vous voudrez peut-être que vos valeurs ne soient pas que des chaînes.

Si votre valeur est un objet de domaine, vous pouvez utiliser le sérialiseur Jackson et configurer un sérialiseur comme mentionné ici, c'est-à-dire comme ceci :

<bean id="userJsonRedisSerializer" class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
    <constructor-arg type="java.lang.Class" value="com.mycompany.redis.domain.User"/>
</bean>

et configurez votre modèle comme :

<bean 
    id="redisTemplate" 
    class="org.springframework.data.redis.core.RedisTemplate"
    p:connection-factory-ref="jedisConnectionFactory" 
    p:keySerializer-ref="stringRedisSerializer"
    p:hashKeySerializer-ref="stringRedisSerializer" 
    p:valueSerialier-ref="userJsonRedisSerializer"
/>