W skrócie
Musisz skonfigurować serializatory.
Wyjaśnienie
Szablon Redis używa serializatorów kluczy, wartości i kluczy/wartości skrótu. Serializatory służą do konwertowania danych wejściowych Java na reprezentację przechowywaną w Redis. Jeśli nic nie skonfigurujesz, serializator domyślnie to JdkSerializationRedisSerializer
. Więc jeśli poprosisz o klucz key
w kodzie Java serializator konwertuje go na
"\xac\xed\x00\x05t\x00\x03key"
a Spring Data Redis używa tych bajtów jako klucza do zapytania Redis.
Możesz dodawać dane za pomocą Spring Data Redis i wysyłać do nich zapytania za pomocą redis-cli
:
template.boundSetOps("myKey").add(new Date());
a następnie w 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"
Jak widać, ciąg i data są serializowane w kilka zwariowanych bajtów, które reprezentują obiekt serializowany w języku Java.
Twój kod sugeruje, że chcesz przechowywać klucze i wartości oparte na ciągach. Po prostu ustaw StringRedisSerializer
w swoim RedisTemplate
Konfiguracja Java
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
Konfiguracja 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"/>
Wynik po uruchomieniu kodu wygląda tak:
value
key
[value]
Spring Data Redis ma kilka interesujących serializatorów, które umożliwiają wymianę wiadomości między różnymi systemami. Możesz wybrać jeden z wbudowanych serializatorów
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (domyślnie)
- Serializator Oxm
- GenericToStringSerializer
lub stwórz własną.
Użyłem Spring Data Redis 1.5.1.RELEASE i jedis 2.6.2, aby zweryfikować wynik twojego pytania. HTH, Mark
Czytaj dalej:
- Wiosna Redis danych:serializatory
- Podsumowanie zawierające twój przykład