Ve zkratce
Musíte nakonfigurovat serializátory.
Vysvětlení
Šablona Redis používá serializátory pro klíče, hodnoty a hash klíče/hodnoty. Serializátory se používají k převodu vstupu Java na reprezentaci, která je uložena v Redis. Pokud nic nenakonfigurujete, serializátor se automaticky nastaví na JdkSerializationRedisSerializer
. Pokud tedy požádáte o klíč key
ve vašem kódu Java jej serializátor převede na
"\xac\xed\x00\x05t\x00\x03key"
a Spring Data Redis používá tyto bajty jako klíč pro dotazování Redis.
Data můžete přidávat pomocí Spring Data Redis a dotazovat se na ně pomocí redis-cli
:
template.boundSetOps("myKey").add(new Date());
a poté v 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"
Jak vidíte, řetězec a datum jsou serializovány do bláznivých bajtů, které představují objekt serializovaný v Javě.
Váš kód naznačuje, že chcete uložit klíče a hodnoty založené na řetězcích. Stačí nastavit StringRedisSerializer
ve vaší RedisTemplate
Konfigurace Java
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
Konfigurace 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"/>
Výstup po spuštění kódu vypadá takto:
value
key
[value]
Spring Data Redis má několik zajímavých serializátorů, které umožňují výměnu zpráv mezi různými systémy. Můžete si vybrat buď z vestavěných serializátorů
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (výchozí)
- OxmSerializer
- GenericToStringSerializer
nebo si vytvořte vlastní.
K ověření výsledku vaší otázky jsem použil Spring Data Redis 1.5.1.RELEASE a jedis 2.6.2. HTH, Mark
Dále čtěte:
- Spring Data Redis:Serializers
- Přehled obsahující váš příklad