Накратко
Трябва да конфигурирате сериализатори.
Обяснение
Шаблонът 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 Redis 1.5.1.RELEASE и jedis 2.6.2, за да проверя резултата от вашия въпрос. HTH, Марк
Прочетете допълнително:
- Spring Data Redis:сериализатори
- Общност, съдържаща вашия пример