In breve
Devi configurare i serializzatori.
Spiegazione
Il modello Redis utilizza serializzatori per chiavi, valori e chiavi/valori hash. I serializzatori vengono utilizzati per convertire l'input Java nella rappresentazione archiviata in Redis. Se non configuri nulla, il serializzatore predefinito è JdkSerializationRedisSerializer
. Quindi se chiedi una chiave key
nel codice Java, il serializzatore lo converte in
"\xac\xed\x00\x05t\x00\x03key"
e Spring Data Redis usa quei byte come chiave per interrogare Redis.
Puoi aggiungere dati con Spring Data Redis ed eseguirne una query utilizzando redis-cli
:
template.boundSetOps("myKey").add(new Date());
e poi nel 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"
Come puoi vedere, la stringa e la data sono serializzate in alcuni byte pazzi che rappresentano un oggetto serializzato in Java.
Il codice suggerisce di voler archiviare chiavi e valori basati su stringhe. Basta impostare StringRedisSerializer
nel tuo RedisTemplate
Configurazione Java
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
Configurazione 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"/>
L'output dopo aver eseguito il codice è simile a:
value
key
[value]
Spring Data Redis ha alcuni serializzatori interessanti che consentono lo scambio di messaggi tra vari sistemi. Puoi scegliere tra i serializzatori integrati
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (predefinito)
- OxmSerializzatore
- GenericToStringSerializer
o creane uno tuo.
Ho usato Spring Data Redis 1.5.1.RELEASE e jedis 2.6.2 per verificare il risultato della tua domanda. HTH, Marco
Leggi ulteriormente:
- Redis dei dati di primavera:serializzatori
- Gist contenente il tuo esempio