Redis
 sql >> база данни >  >> NoSQL >> Redis

Вземете Set стойност от Redis с помощта на RedisTemplate

Накратко

Трябва да конфигурирате сериализатори.

Обяснение

Шаблонът 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:сериализатори
  • Общност, съдържаща вашия пример


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Статистика на Redis

  2. има ли начин да получа IP на клиента в redis?

  3. Конфигурация на Laravel Redis

  4. Spring Data Redis (1.3.2.RELEASE) поддържа ли JedisSentinelPool на джедаите?

  5. Опашката за redis на Laravel 5.5 е твърде бавна