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

Hvorfor bliver data gemt med mærkelige nøgler i Redis, når du bruger Jedis med Spring Data?

Ok, googlede lidt rundt og fandt hjælp på http://java.dzone.com/articles/spring-data-redis.

Det skete på grund af Java-serialisering.

Nøgleserializeren til redisTemplate skal konfigureres til StringRedisSerializer altså sådan her:

<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 er nøglen i redis vc:501381 .

Eller som @niconic siger, vi kan også indstille selve standardserializeren til strengserializeren som følger:

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

hvilket betyder, at alle vores nøgler og værdier er strenge. Bemærk dog, at dette måske ikke er at foretrække, da du måske ønsker, at dine værdier ikke kun skal være strenge.

Hvis din værdi er et domæneobjekt, så kan du bruge Jackson serializer og konfigurere en serializer som nævnt her, dvs. sådan her:

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

og konfigurer din skabelon 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. docker-compose + django + redis - Fejl 111 ved forbindelse til 127.0.0.1:6379. Tilslutning afvist

  2. MongoDB estimatedDocumentCount()

  3. 3 måder at returnere distinkte værdier i MongoDB

  4. mongodb tekstsøgning med flere felter