一、
spring-data-redis序列化策略
spring-data-redis提供了多种serializer策略,这对使用jedis的开发者而言,实在是非常便捷。sdr提供了4种内置的serializer:
- JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储,jdk序列化和反序列化数据
- StringRedisSerializer:字符串编码,数据以string存储
- JacksonJsonRedisSerializer:json格式存储
- OxmSerializer:xml格式存储
其中JdkSerializationRedisSerializer和StringRedisSerializer是最基础的序列化策略,其中“JacksonJsonRedisSerializer”与“OxmSerializer”都是基于stirng存储,因此它们是较为“高级”的序列化(最终还是使用string解析以及构建java对象)。
RedisTemplate中需要声明4种serializer,默认为“JdkSerializationRedisSerializer”:
1) keySerializer :对于普通K-V操作时,key采取的序列化策略
2) valueSerializer:value采取的序列化策略
3) hashKeySerializer: 在hash数据结构中,hash-key的序列化策略
4) hashValueSerializer:hash-value的序列化策略
无论如何,建议key/hashKey采用StringRedisSerializer。 这redis服务端用命令行好查看 配置如下:
< ! -- redis template definition -- >
< bean id = "redisTemplate"
class = "org.springframework.data.redis.core.RedisTemplate"
p : connection - factory - ref = "jedisConnFactory" scope = "prototype" >
< ! -- 使用string主要是key 在 redis 端用命令好读 不然默认的序列化没办法读 -- >
< property name = "keySerializer" >
< bean class = "org.springframework.data.redis.serializer.StringRedisSerializer" / >
< / property >
< property name = "hashKeySerializer" >
< bean class = "org.springframework.data.redis.serializer.StringRedisSerializer" / >
< / property >
< / bean >
二、 自定义序列化处理效果
默认是JdkSerializationRedisSerializer存储,占用空间比较大,如图: