Redis
 sql >> Database >  >> NoSQL >> Redis

Perché i dati vengono archiviati con chiavi strane in Redis quando si utilizza Jedis con Spring Data?

Ok, ho cercato su Google per un po' e ho trovato aiuto su http://java.dzone.com/articles/spring-data-redis.

È successo a causa della serializzazione di Java.

Il serializzatore chiave per redisTemplate deve essere configurato su StringRedisSerializer cioè in questo modo:

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

Ora la chiave in redis è vc:501381 .

O come dice @niconic, possiamo anche impostare il serializzatore predefinito stesso sul serializzatore di stringhe come segue:

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

il che significa che tutte le nostre chiavi e valori sono stringhe. Nota tuttavia che questo potrebbe non essere preferibile, poiché potresti volere che i tuoi valori non siano solo stringhe.

Se il tuo valore è un oggetto di dominio, puoi utilizzare il serializzatore Jackson e configurare un serializzatore come menzionato qui, ad esempio in questo modo:

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

e configura il tuo modello come:

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