sql >> Databáze >  >> NoSQL >> Redis

Získejte hodnotu Set z Redis pomocí RedisTemplate

Ve zkratce

Musíte nakonfigurovat serializátory.

Vysvětlení

Šablona Redis používá serializátory pro klíče, hodnoty a hash klíče/hodnoty. Serializátory se používají k převodu vstupu Java na reprezentaci, která je uložena v Redis. Pokud nic nenakonfigurujete, serializátor se automaticky nastaví na JdkSerializationRedisSerializer . Pokud tedy požádáte o klíč key ve vašem kódu Java jej serializátor převede na

"\xac\xed\x00\x05t\x00\x03key"

a Spring Data Redis používá tyto bajty jako klíč pro dotazování Redis.

Data můžete přidávat pomocí Spring Data Redis a dotazovat se na ně pomocí redis-cli :

template.boundSetOps("myKey").add(new Date());

a poté v 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 vidíte, řetězec a datum jsou serializovány do bláznivých bajtů, které představují objekt serializovaný v Javě.

Váš kód naznačuje, že chcete uložit klíče a hodnoty založené na řetězcích. Stačí nastavit StringRedisSerializer ve vaší RedisTemplate

Konfigurace Java

redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());

Konfigurace 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"/>

Výstup po spuštění kódu vypadá takto:

value
key
[value]

Spring Data Redis má několik zajímavých serializátorů, které umožňují výměnu zpráv mezi různými systémy. Můžete si vybrat buď z vestavěných serializátorů

  • JacksonJsonRedisSerializer
  • Jackson2JsonRedisSerializer
  • JdkSerializationRedisSerializer (výchozí)
  • OxmSerializer
  • GenericToStringSerializer

nebo si vytvořte vlastní.

K ověření výsledku vaší otázky jsem použil Spring Data Redis 1.5.1.RELEASE a jedis 2.6.2. HTH, Mark

Dále čtěte:

  • Spring Data Redis:Serializers
  • Přehled obsahující váš příklad


  1. Java Mongodb číselný dotaz

  2. Odstranění duplicitních záznamů pomocí MapReduce

  3. Používejte MongoEngine a PyMongo společně

  4. Nelze svázat TCP listener *:6379 pomocí Redis v systému Windows