spring-data-redis的序列化类有下面这几个:
GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化
Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer实际上是一样的
JacksonJsonRedisSerializer: 序列化object对象为json字符串
JdkSerializationRedisSerializer: 序列化java对象(被序列化的对象必须实现Serializable接口)
StringRedisSerializer: 简单的字符串序列化
GenericToStringSerializer:类似StringRedisSerializer的字符串序列化
GenericJackson2JsonRedisSerializer:类似Jackson2JsonRedisSerializer,但使用时构造函数不用特定的类
参考以上序列化,自定义序列化类
Jdk序列化速度快,占用空间大,不易查看,通过redis命令查看类似\xAC\xED\x00\x05t\x00\x011不方便
Hash最好还是用GenericJackson2JsonRedisSerializer
在用spring-data-redis做redis缓存的时候,指定RedisTemplate的key和value序列化时遇到的问题。
RedisTemplate的key指定成StringRedisSerializer序列化会报类型转换错误,如XXX类不能转换成String。
使用Jackson2JsonRedisSerializer序列化的时候,如果实体类上没有set方法反序列化会报错。
同时采用了StringRedisTemplate和RedisTemplate时注意
并且对存储String与存储Java对象采用不同的Template进行了简单的封装。
spring-data-redis默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。StringRedisSerializer
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。JdkSerializationRedisSerializer
推荐将所有Template的key都采用String的序列化方式,而value的序列化方式可以采用不同的序列化方式。(jreids自动选择)(这样还有一个好处就是不必string的也采用jdk的序列化从而导常用数据格式致为了存储数据结构浪费空间)
GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化
Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer实际上是一样的
JacksonJsonRedisSerializer: 序列化object对象为json字符串
JdkSerializationRedisSerializer: 序列化java对象(被序列化的对象必须实现Serializable接口)
StringRedisSerializer: 简单的字符串序列化
GenericToStringSerializer:类似StringRedisSerializer的字符串序列化
GenericJackson2JsonRedisSerializer:类似Jackson2JsonRedisSerializer,但使用时构造函数不用特定的类
参考以上序列化,自定义序列化类
Jdk序列化速度快,占用空间大,不易查看,通过redis命令查看类似\xAC\xED\x00\x05t\x00\x011不方便
Hash最好还是用GenericJackson2JsonRedisSerializer
在用spring-data-redis做redis缓存的时候,指定RedisTemplate的key和value序列化时遇到的问题。
RedisTemplate的key指定成StringRedisSerializer序列化会报类型转换错误,如XXX类不能转换成String。
使用Jackson2JsonRedisSerializer序列化的时候,如果实体类上没有set方法反序列化会报错。
同时采用了StringRedisTemplate和RedisTemplate时注意
并且对存储String与存储Java对象采用不同的Template进行了简单的封装。
spring-data-redis默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。StringRedisSerializer
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。JdkSerializationRedisSerializer
推荐将所有Template的key都采用String的序列化方式,而value的序列化方式可以采用不同的序列化方式。(jreids自动选择)(这样还有一个好处就是不必string的也采用jdk的序列化从而导常用数据格式致为了存储数据结构浪费空间)
参考https://blog.csdn.net/y666666y/article/details/70212767
贴上自用的
/**
* 设置数据存入 redis 的序列化方式
*
* @param redisTemplate
* @param factory
*/
private void initRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer ());
//redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer (BaseInfo.class));
//redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
// redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(factory);
}