要するに
シリアライザーを構成する必要があります。
説明
Redisテンプレートは、キー、値、ハッシュキー/値にシリアライザーを使用します。シリアライザーは、Java入力をRedis内に格納されている表現に変換するために使用されます。何も構成しない場合、シリアライザーはデフォルトでJdkSerializationRedisSerializer
になります。 。したがって、キーkey
を要求した場合 Javaコードでは、シリアライザーがそれを
"\xac\xed\x00\x05t\x00\x03key"
Spring Data Redisは、これらのバイトをキーとしてRedisにクエリを実行します。
Spring Data Redisでデータを追加し、redis-cli
を使用してクエリを実行できます :
template.boundSetOps("myKey").add(new Date());
次に、redis-cli
で
127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x05myKey"
127.0.0.1:6379> SMEMBERS "\xac\xed\x00\x05t\x00\x05myKey"
1) "\xac\xed\x00\x05sr\x00\x0ejava.util.Datehj\x81\x01KYt\x19\x03\x00\x00xpw\b\x00\x00\x01N\xcf#\x9cHx"
ご覧のとおり、文字列と日付は、Javaでシリアル化されたオブジェクトを表すいくつかのクレイジーなバイトにシリアル化されています。
あなたのコードは、文字列ベースのキーと値を保存したいことを示唆しています。 StringRedisSerializer
を設定するだけです RedisTemplate
で
Java構成
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
XML構成
<bean id="stringSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jedisConnectionFactory">
<property name="keySerializer" ref="stringSerializer"/>
<property name="valueSerializer" ref="stringSerializer"/>
</bean>
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="myhostname" p:port="6379"/>
コードを実行した後の出力は次のようになります:
value
key
[value]
Spring Data Redisには、さまざまなシステム間でのメッセージ交換を可能にする興味深いシリアライザーがいくつかあります。組み込みのシリアライザーから選択できます
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer(デフォルト)
- OxmSerializer
- GenericToStringSerializer
または独自に作成します。
Spring Data Redis1.5.1.RELEASEとjedis2.6.2を使用して、質問の結果を確認しました。 HTH、マーク
さらに読む:
- Spring Data Redis:シリアライザー
- 例を含む要点