Kort sagt
Du måste konfigurera serializers.
Förklaring
Redis-mallen använder serialiserare för nycklar, värden och hash-nycklar/värden. Serializers används för att konvertera Java-ingången till representationen som är lagrad i Redis. Om du inte konfigurerar någonting, är serializern som standard JdkSerializationRedisSerializer
. Så om du ber om en nyckel key
i din Java-kod konverterar serializern den till
"\xac\xed\x00\x05t\x00\x03key"
och Spring Data Redis använder dessa byte som nyckeln för att fråga Redis.
Du kan lägga till data med Spring Data Redis och fråga dem med redis-cli
:
template.boundSetOps("myKey").add(new Date());
och sedan 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 ser är strängen och datumet serialiserade till några galna bytes som representerar ett Java-serialiserat objekt.
Din kod antyder att du vill lagra strängbaserade nycklar och värden. Ställ bara in 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"/>
Utdata efter att du kört din kod ser ut så här:
value
key
[value]
Spring Data Redis har några intressanta serialiserare som tillåter meddelandeutbyte mellan olika system. Du kan välja antingen från de inbyggda serializers
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (standard)
- OxmSerializer
- GenericToStringSerializer
eller skapa din egen.
Jag använde Spring Data Redis 1.5.1.RELEASE och jedis 2.6.2 för att verifiera resultatet av din fråga. HTH, Mark
Läs mer:
- Spring Data Redis:Serializers
- Sammanfattning som innehåller ditt exempel