Spring-data-redisのシーケンス化問題


先日、spring-data-redisの質問に、私のブログに伝言がありました.以下のように、黒体は私の答えです.
 
 
私はspring-data-redisで成功したsetを使って、しかも対応するデータをgetすることにも成功しました~
しかしredis-cliでサーバーに行って直接getデータがヒント(nil)なのは何の原因ですか?
 
普通は存在しないkeyをgetしてこそ
 
でも私は同じkeyを使っています・・・spring-data-redisでgetできます~~
もし私が直接jedisで保存していたらこんな問題はありません・・・大侠解惑ですね・・
 
私はプロジェクトでjedisを直接使っています.
spring-data-redisがkeyとvalueをシーケンス化してbyte[]になって対応するredis java clientを呼び出して格納したことをふと思い出す.それはspring-data-redisを通じてredisに入るkeyが変わったはずだ.
 
 
今日はこの問題について詳しく分析します.
 
redisを正常に使用する場合keyとvalueは一般的にstringタイプです
しかし、clientとserver間のプロトコルはbyteが私の別のブログhttp://jimgreat.iteye.com/blog/1586671を参照することを要求しています.
Jedisはstringとbyte[]タイプの関数インタフェースを提供します
 
 
Spring-data-redisのコア操作クラスはRedisTemplate
keyもvalueも汎用的であることがわかり,タイプをシーケンス化する問題にかかわる.
RedisTemplateにはいくつかのRedisSerializerがあります
 
 
	private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer();

	private RedisSerializer keySerializer = null;
	private RedisSerializer valueSerializer = null;
	private RedisSerializer hashKeySerializer = null;
	private RedisSerializer hashValueSerializer = null;
	private RedisSerializer<String> stringSerializer = new StringRedisSerializer();
 
特別な設定がない場合、keyとvalueはdefaultSerializer=new J d k SerializationRedisSerializer()を使用します.シーケンス化されます.
 
key="AAAAAA"value="ccc"の場合、server側が実行する場合は次のようになります.
 
 "SET""\xac\xed\x00\x05t\x00\x04AAAA""\xac\xed\x00\x05t\x00\x04cccc"
 "GET""\xac\xed\x00\x05t\x00\x04AAAA"
 
プロジェクトでstringのkeyとvalueしか使用されていない場合は、sever上でdebugを行うのに適していないことが明らかです.
 
次の構成では、StringRedisSerializerを使用してkeyとvalueをシーケンス化することができます.
 
 
  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
    p:connection-factory-ref="jedisConnectionFactory" >
       <property name="KeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <property name="ValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>       
    </bean>

 
これでサーバで元のキーを見つけることができます
 
 "SET""AAAA""cccc"
 "GET""AAAA"
 
Hash構造内部のkeyとvalueには、次の構成を追加できます.
 
 
        <property name="HashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>  
        <property name="HashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>