sql >> Base de Datos >  >> NoSQL >> Redis

¿Por qué los datos se almacenan con claves raras en Redis cuando se usan Jedis con Spring Data?

Ok, busqué en Google por un rato y encontré ayuda en http://java.dzone.com/articles/spring-data-redis.

Sucedió debido a la serialización de Java.

El serializador clave para redisTemplate debe configurarse para StringRedisSerializer es decir, así:

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

Ahora la clave en redis es vc:501381 .

O como dice @niconic, también podemos configurar el serializador predeterminado en el serializador de cadenas de la siguiente manera:

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

lo que significa que todas nuestras claves y valores son cadenas. Tenga en cuenta, sin embargo, que esto puede no ser preferible, ya que es posible que desee que sus valores no sean solo cadenas.

Si su valor es un objeto de dominio, entonces puede usar el serializador Jackson y configurar un serializador como se menciona aquí, es decir, así:

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

y configure su plantilla como:

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