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があります
特別な設定がない場合、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をシーケンス化することができます.
これでサーバで元のキーを見つけることができます
"SET""AAAA""cccc"
"GET""AAAA"
Hash構造内部のkeyとvalueには、次の構成を追加できます.
私は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>