15,序列化

关于序列化算法,几年前常用的有JDK(Java)序列化、XML序列化等,但前者不能跨语言,后者性能较差(时间空间开销大);现在RESTful应用最常用的是JSON序列化,追求性能的RPC框架(比如gRPC)使用protobuf序列化,这2种方法都是跨语言的,而且性能不错,
应用广泛。

序列化和反序列化算法要保持一致

Spring中redisTemplate, RedisTemplate默认使用的JDK序列化方式, StringRedisTemplate使用String序列化方式

  1. 默认情况下,RedisTemplate使用JdkSerializationRedisSerializer,也就是JDK序列化,容易产生Redis中保存了乱码的错觉。
  2. 通常考虑到易读性,可以设置Key的序列化器为StringRedisSerializer。但直接使用RedisSerializer.string(),相当于使用了UTF_8编码的StringRedisSerializer,需要注意字符集问题。
  3. 如果希望Value也是使用JSON序列化的话,可以把Value序列化器设置为Jackson2JsonRedisSerializer。默认情况下,不会把类型信息保存在Value中,即使我们定义RedisTemplate的Value泛型为实际类型,查询出的Value也只能是LinkedHashMap类型。如果希望直接
    获取真实的数据类型,你可以启用JacksonObjectMapper的activateDefaultTyping方法,把类型信息一起序列化保存在Value中。
  4. 如果希望Value以JSON保存并带上类型信息,更简单的方式是,直接使用RedisSerializer.json()快捷方法来获取序列化器。
反序列化
默认情况下,在反序列化的时候,**Jackson框架只会调用无参构造方法创建对象**。如果走自定义的构造方法创建对象,需要通过@JsonCreator来指定构造方法,并通过@JsonProperty设置构造方法中参数对应的JSON属性名. **更合理的方式是,对于需要序列化的POJO考虑尽量不要自定义构造方法。**
@Data
public class APIResultRight {
	......
	@JsonCreator
	public APIResultRight(@JsonProperty("code") int code) {
	this.code = code;
	if (code == 2000) success = true;
	else success = false;
	}
}
使用RedisTemplate
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值