sql >> データベース >  >> NoSQL >> Redis

Spring DataでJedisを使用しているときに、Redisでデータが奇妙なキーで保存されるのはなぜですか?

    しばらくの間グーグルで検索して、http://java.dzone.com/articles/spring-data-redisでヘルプを見つけました。

    これは、Javaのシリアル化が原因で発生しました。

    redisTemplateのキーシリアライザーは、StringRedisSerializerに構成する必要があります つまり、次のようになります:

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

    現在、redisのキーはvc:501381です。 。

    または、@ niconicが言うように、次のようにデフォルトのシリアライザー自体を文字列シリアライザーに設定することもできます。

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

    これは、すべてのキーと値が文字列であることを意味します。ただし、値を単なる文字列ではなくしたい場合があるため、これは好ましくない場合があることに注意してください。

    値がドメインオブジェクトの場合は、Jacksonシリアライザーを使用して、ここで説明するように、つまり次のようにシリアライザーを構成できます。

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

    テンプレートを次のように構成します:

    <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. JSONとしてシリアル化されたMongoDBオブジェクト

    2. maxdistanceとMongoDBに使用するユニット?

    3. MongoDB複合インデックスの使用法

    4. ノードJs:タスクの完了後にRedisジョブが完了していません