sql >> Databasteknik >  >> NoSQL >> Redis

Varför lagras data med konstiga nycklar i Redis när du använder Jedis med Spring Data?

Okej, googlade runt ett tag och hittade hjälp på http://java.dzone.com/articles/spring-data-redis.

Det hände på grund av Java-serialisering.

Nyckelserializern för redisTemplate måste konfigureras till StringRedisSerializer dvs så här:

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

Nu är nyckeln i redis vc:501381 .

Eller som @niconic säger, vi kan också ställa in själva standardserializern till strängserializern enligt följande:

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

vilket betyder att alla våra nycklar och värden är strängar. Observera dock att detta kanske inte är att föredra, eftersom du kanske vill att dina värden inte bara ska vara strängar.

Om ditt värde är ett domänobjekt kan du använda Jackson serializer och konfigurera en serializer som nämns här, dvs så här:

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

och konfigurera din mall som:

<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. RuntimeWarning:Du kör arbetaren med superanvändarprivilegier:detta rekommenderas absolut inte

  2. Hur använder man Mongoose utan att definiera ett schema?

  3. Kan jag använda '$set' på inbäddat dokument när jag använder variabel som arkiverat namn i MongoDB?

  4. MongoDB $eq Aggregation Pipeline Operator