Tóm lại
Bạn phải định cấu hình bộ tuần tự.
Giải thích
Mẫu Redis sử dụng bộ tuần tự hóa cho các khóa, giá trị và khóa / giá trị băm. Serializers được sử dụng để chuyển đổi đầu vào Java thành biểu diễn được lưu trữ trong Redis. Nếu bạn không định cấu hình bất kỳ thứ gì, trình tuần tự sẽ mặc định thành JdkSerializationRedisSerializer
. Vì vậy, nếu bạn yêu cầu một khóa key
trong mã Java của bạn, trình tuần tự chuyển đổi nó thành
"\xac\xed\x00\x05t\x00\x03key"
và Spring Data Redis sử dụng các byte đó làm khóa để truy vấn Redis.
Bạn có thể thêm dữ liệu với Spring Data Redis và truy vấn nó bằng cách sử dụng redis-cli
:
template.boundSetOps("myKey").add(new Date());
và sau đó trong 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"
Như bạn thấy, Chuỗi và Ngày được tuần tự hóa thành một số byte điên rồ đại diện cho một đối tượng được tuần tự hóa bằng Java.
Mã của bạn gợi ý rằng bạn muốn lưu trữ các khóa và giá trị dựa trên chuỗi. Chỉ cần đặt StringRedisSerializer
trong RedisTemplate
của bạn
Cấu hình Java
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
Cấu hình 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"/>
Đầu ra sau khi chạy mã của bạn trông giống như sau:
value
key
[value]
Spring Data Redis có một số trình tuần tự thú vị cho phép trao đổi tin nhắn giữa các hệ thống khác nhau. Bạn có thể chọn trong số các bộ tuần tự tích hợp sẵn
- JacksonJsonRedisSerializer
- Jackson2JsonRedisSerializer
- JdkSerializationRedisSerializer (mặc định)
- OxmSerializer
- GenericToStringSerializer
hoặc tạo của riêng bạn.
Tôi đã sử dụng Spring Data Redis 1.5.1.RELEASE và jedis 2.6.2 để xác minh kết quả câu hỏi của bạn. HTH, Mark
Đọc thêm:
- Spring Data Redis:Serializers
- Thông tin tóm tắt chứa ví dụ của bạn