Ответ 1
Вкратце
Вам необходимо настроить сериализаторы.
объяснение
Шаблон Redis использует сериализаторы для ключей, значений и хеш-ключей/значений. Сериализаторы используются для преобразования входа Java в представление, которое хранится в Redis. Если вы ничего не сконфигурируете, по умолчанию для serializer используется 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"
Как вы видите, String и Date сериализуются в некоторые сумасшедшие байты, представляющие объект, сериализованный Java.
Ваш код подсказывает, что вы хотите хранить клавиши и значения на основе String. Просто установите 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, Mark
Далее читайте: