Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Warum werden Daten mit seltsamen Schlüsseln in Redis gespeichert, wenn Jedis mit Spring Data verwendet wird?

Ok, ich habe eine Weile gegoogelt und Hilfe unter http://java.dzone.com/articles/spring-data-redis.

gefunden

Es geschah wegen der Java-Serialisierung.

Der Key Serializer für redisTemplate muss auf StringRedisSerializer konfiguriert werden d.h. so:

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

Jetzt ist der Schlüssel in redis vc:501381 .

Oder wie @niconic sagt, wir können auch den Standard-Serializer selbst wie folgt auf den String-Serializer setzen:

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

was bedeutet, dass alle unsere Schlüssel und Werte Zeichenfolgen sind. Beachten Sie jedoch, dass dies möglicherweise nicht vorzuziehen ist, da Sie möglicherweise möchten, dass Ihre Werte nicht nur Zeichenfolgen sind.

Wenn Ihr Wert ein Domänenobjekt ist, können Sie den Jackson-Serializer verwenden und einen Serializer wie hier erwähnt konfigurieren, z. B. so:

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

und konfigurieren Sie Ihre Vorlage als:

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