Kortom
U moet serializers configureren.
Uitleg
De Redis-sjabloon gebruikt serializers voor sleutels, waarden en hash-sleutels/waarden. Serializers worden gebruikt om de Java-invoer om te zetten in de representatie die is opgeslagen in Redis. Als u niets configureert, wordt de serializer standaard ingesteld op JdkSerializationRedisSerializer
. Dus als u om een sleutel key
vraagt in uw Java-code, converteert de serializer deze naar
"\xac\xed\x00\x05t\x00\x03key"
en Spring Data Redis gebruikt die bytes als de sleutel om Redis op te vragen.
U kunt gegevens toevoegen met Spring Data Redis en deze opvragen met behulp van de redis-cli
:
template.boundSetOps("myKey").add(new Date());
en dan in de 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"
Zoals je ziet, zijn de String en de Datum geserialiseerd in een aantal gekke bytes die een Java-geserialiseerd object vertegenwoordigen.
Uw code suggereert dat u op tekenreeksen gebaseerde sleutels en waarden wilt opslaan. Stel gewoon de StringRedisSerializer
. in in uw RedisTemplate
Java-configuratie
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
XML-configuratie
<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"/>
De uitvoer na het uitvoeren van uw code ziet er als volgt uit:
value
key
[value]
Spring Data Redis heeft een aantal interessante serializers waarmee berichten tussen verschillende systemen kunnen worden uitgewisseld. U kunt kiezen uit de ingebouwde serializers
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (standaard)
- OxmSerializer
- GenericToStringSerializer
of maak je eigen.
Ik heb Spring Data Redis 1.5.1.RELEASE en jedis 2.6.2 gebruikt om het resultaat van uw vraag te verifiëren. HTH, Mark
Lees verder:
- Spring Data Redis:Serializers
- Samenvatting met uw voorbeeld