sql >> Databáze >  >> NoSQL >> Redis

Proč se data ukládají pomocí podivných klíčů v Redis při použití Jedis s Spring Data?

Dobře, chvíli jsem googlil a našel nápovědu na http://java.dzone.com/articles/spring-data-redis.

Stalo se to kvůli serializaci Java.

Serializátor klíčů pro redisTemplate musí být nakonfigurován na StringRedisSerializer tedy takto:

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

Nyní je klíč v redis vc:501381 .

Nebo jak říká @niconic, můžeme také nastavit samotný výchozí serializátor na řetězec serializátor takto:

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

což znamená, že všechny naše klíče a hodnoty jsou řetězce. Všimněte si však, že to nemusí být vhodnější, protože možná budete chtít, aby vaše hodnoty nebyly jen řetězce.

Pokud je vaší hodnotou objekt domény, můžete použít serializátor Jackson a nakonfigurovat serializátor, jak je zde uvedeno, tj. takto:

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

a nakonfigurujte svou šablonu jako:

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


  1. Vynutit mongodb k výstupu striktního JSON

  2. Jak nakonfigurovat redis-cluster při použití spring-data-redis 1.7.0.M1

  3. Přidat expiraci do mezipaměti Redis

  4. Může mongo přenést data pole?