缓存中存储数据推荐格式

本文建议避免使用二进制格式进行数据序列化,因为字段的增删或移动会导致反序列化错误。推荐使用如JSON的顺序兼容序列化方式,以确保数据存储的兼容性。同时,针对存储浪费的问题,提出采用压缩数据的方法,如自定义短字段名称以减少存储占用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不要使用二进制格式

当使用如protoBufmsgpack或者java自带的二进制格式进行序列化时候,为了节约数据量的原因,会将类里的字段按字段在类中出现的顺序进行序列化。
当我们因为需求进行升级时,可能会对类里的字段进行增删或者移动。此时,我们之前存储在jimdb里的数据在读取回来进行反序列化时就会报错。
因为上述原因,我们推荐用顺序兼容&新增字段兼容的序列化方式,如JSON,进行数据的存储。

如何进行一些压缩数据

当我们用类似JSON的格式进行类序列化时候,会将类中所有字段名称一起进行序列化,虽然这能够解决上述序列化兼容性问题,但是会带来存储浪费。

  • 当一个类的某个字段长度为50字符时,当数据达到1000W条时,在jimdb里就占有5000W字符。这种显然是一种浪费
  • 因为个人命名习惯,可能类中字段名称超长,当采用类似JSON格式序列化时,也是一种浪费存储

为了实现序列化兼容,同时尽可能节约存储,推荐采用fastjsongson的自定义序列化列名的方式进行:
fastjson的方式如下:

/**
 * erp账号
 */
@JSONField(name = "1")
private String userName;
/**
 * 真名
 */
@JSONField(name = "2")
private String realName;   

gson的方式如下:

/**
 * id
 */
@SerializedName(value = "1", alternate = "id")
private Long id;
/**
 * 路由字段
 */
@SerializedName(value = "2", alternate = "routeParam")
private String routeParam;

通过数字或者其它比如字母的方式来改写序列化后的字段名称,既能保证序列化的兼容性又能保证存储容量尽可能的少

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值