Kort sagt
Du skal konfigurere serializers.
Forklaring
Redis-skabelonen bruger serializers til nøgler, værdier og hashnøgler/værdier. Serializers bruges til at konvertere Java-inputtet til den repræsentation, der er gemt i Redis. Hvis du ikke konfigurerer noget, er serializeren standard til JdkSerializationRedisSerializer
. Så hvis du beder om en nøgle key
i din Java-kode konverterer serializeren den til
"\xac\xed\x00\x05t\x00\x03key"
og Spring Data Redis bruger disse bytes som nøglen til at forespørge Redis.
Du kan tilføje data med Spring Data Redis og forespørge på dem ved hjælp af redis-cli
:
template.boundSetOps("myKey").add(new Date());
og derefter i 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"
Som du kan se, er strengen og datoen serialiseret til nogle skøre bytes, der repræsenterer et Java-serialiseret objekt.
Din kode antyder, at du vil gemme strengbaserede nøgler og værdier. Indstil bare StringRedisSerializer
i din RedisTemplate
Java-konfiguration
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
XML-konfiguration
<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"/>
Outputtet efter at have kørt din kode ser således ud:
value
key
[value]
Spring Data Redis har nogle interessante serializers, der tillader beskedudveksling mellem forskellige systemer. Du kan vælge enten fra de indbyggede serializers
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (standard)
- OxmSerializer
- GenericToStringSerializer
eller opret din egen.
Jeg brugte Spring Data Redis 1.5.1.RELEASE og jedis 2.6.2 til at verificere resultatet af dit spørgsmål. HTH, Mark
Læs mere:
- Spring Data Redis:Serializers
- Genstand, der indeholder dit eksempel