sql >> Databasteknik >  >> NoSQL >> Redis

Få Set value från Redis med RedisTemplate

Kort sagt

Du måste konfigurera serializers.

Förklaring

Redis-mallen använder serialiserare för nycklar, värden och hash-nycklar/värden. Serializers används för att konvertera Java-ingången till representationen som är lagrad i Redis. Om du inte konfigurerar någonting, är serializern som standard JdkSerializationRedisSerializer . Så om du ber om en nyckel key i din Java-kod konverterar serializern den till

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

och Spring Data Redis använder dessa byte som nyckeln för att fråga Redis.

Du kan lägga till data med Spring Data Redis och fråga dem med redis-cli :

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

och sedan i 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"

Som du ser är strängen och datumet serialiserade till några galna bytes som representerar ett Java-serialiserat objekt.

Din kod antyder att du vill lagra strängbaserade nycklar och värden. Ställ bara in StringRedisSerializer i din RedisTemplate

Java-konfiguration

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

XML-konfiguration

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

Utdata efter att du kört din kod ser ut så här:

value
key
[value]

Spring Data Redis har några intressanta serialiserare som tillåter meddelandeutbyte mellan olika system. Du kan välja antingen från de inbyggda serializers

  • JacksonJsonRedisSerializer
  • Jackson2JsonRedisSerializer
  • JdkSerializationRedisSerializer (standard)
  • OxmSerializer
  • GenericToStringSerializer

eller skapa din egen.

Jag använde Spring Data Redis 1.5.1.RELEASE och jedis 2.6.2 för att verifiera resultatet av din fråga. HTH, Mark

Läs mer:

  • Spring Data Redis:Serializers
  • Sammanfattning som innehåller ditt exempel


  1. Hur hideIndex() fungerar i MongoDB

  2. hur man laddar ner en fil sparad i gridFS med nodeJS

  3. (MongoDB Java) $push in i array

  4. Lagra datum i MongoDB utan att ta hänsyn till tidszonen