Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Uzyskaj wartość zestawu z Redis za pomocą RedisTemplate

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy polecenie UNLINK jest zawsze lepsze niż polecenie DEL?

  2. Jak uzyskać, zaktualizować wszystkie klucze i ich wartości z bazy danych redis w c#?

  3. użyj node-redis z węzłem 8 util.promisify

  4. Dlaczego nie mogę uruchomić skryptu lua w redis po ponownym uruchomieniu redis?

  5. Czy można redis potokować wiele poleceń, które zależą od poprzednich?