Singkatnya
Anda harus mengonfigurasi serializer.
Penjelasan
Template Redis menggunakan serializer untuk kunci, nilai, dan kunci/nilai hash. Serializer digunakan untuk mengubah input Java menjadi representasi yang disimpan dalam Redis. Jika Anda tidak mengonfigurasi apa pun, serializer default ke JdkSerializationRedisSerializer
. Jadi jika Anda meminta kunci key
dalam kode Java Anda, serializer mengubahnya menjadi
"\xac\xed\x00\x05t\x00\x03key"
dan Spring Data Redis menggunakan byte tersebut sebagai kunci untuk kueri Redis.
Anda dapat menambahkan data dengan Spring Data Redis dan menanyakannya menggunakan redis-cli
:
template.boundSetOps("myKey").add(new Date());
dan kemudian di 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"
Seperti yang Anda lihat, String dan Date diserialisasi menjadi beberapa byte gila yang mewakili objek serial Java.
Kode Anda menyarankan Anda ingin menyimpan kunci dan nilai berbasis String. Cukup atur StringRedisSerializer
di RedisTemplate
. Anda
Konfigurasi Java
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
Konfigurasi 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"/>
Output setelah menjalankan kode Anda terlihat seperti ini:
value
key
[value]
Spring Data Redis memiliki beberapa serializer menarik yang memungkinkan pertukaran pesan antara berbagai sistem. Anda dapat memilih salah satu dari serializer bawaan
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (default)
- OxmSerializer
- GenericToStringSerializer
atau buat sendiri.
Saya menggunakan Spring Data Redis 1.5.1.RELEASE dan jedis 2.6.2 untuk memverifikasi hasil pertanyaan Anda. HTH, Tandai
Baca lebih lanjut:
- Redis Data Musim Semi:Serializer
- Inti yang berisi contoh Anda