Java Redis—将数据存储到Redis::JSON字符串或序列化pojo中的方法
我的课程如下: public class Person { public String name; public String age; } 公共阶层人士 { 公共字符串名称; 公共字符串年龄; } 我对将Peron地图保存到Redis的方法有点困惑: 我应该采用java序列化/反序列化对象方法,还是尝试转换为JSON,然后存储,反之亦然 对以下几点有何想法:Java Redis—将数据存储到Redis::JSON字符串或序列化pojo中的方法,java,json,serialization,redis,Java,Json,Serialization,Redis,我的课程如下: public class Person { public String name; public String age; } 公共阶层人士 { 公共字符串名称; 公共字符串年龄; } 我对将Peron地图保存到Redis的方法有点困惑: 我应该采用java序列化/反序列化对象方法,还是尝试转换为JSON,然后存储,反之亦然 对以下几点有何想法: 序列化和反序列化的成本与映射到Java和JSON的成本 JSON和Redi
- 序列化和反序列化的成本与映射到Java和JSON的成本
- JSON和Redis序列化对象的内存要求
- 压缩:流与数据 我们应该选择哪种压缩 虽然数据压缩似乎有点困难(没有多少好处),因为我们使用的是Redish散列
- pojo包含许多instancd变量
- 将使用Redis哈希存储对象
压缩。在谷歌,他们使用较少的cpu要求的压缩。Snappy还用于Cassandra、Hadoop和Hypertable。JVM压缩器的一些基准::< P>您应该考虑使用MeasApPACK,因为它与ReIIS和Lua完全兼容,这是JSON上的一个很好的压缩: 这意味着要压缩和解压缩一些Lua代码,但成本应该很小。以下是一个例子: 有一个缺乏数据的小基准:
不过,它对您来说应该是一个很好的选择,因为您可以在不同的语言中使用它,在redis上完全受支持,并且它基于JSON。Re:序列化成本,Java反序列化/序列化将更快。但是如果您使用它,请不要忘记一个
serialVersionUID
。Re:内存,对于非常小的对象(比如少于5个属性),JSON可能会更小,但是对于更大的对象,Java序列化会更小。警告:使用Java序列化将阻止任何其他类型的语言(Python、Ruby、Javascript等)从Redis读取对象。尽管成本较高,我还是倾向于将JSON作为一种语言中立的格式。是的,JSON确实是一个很好的解决方案,特别是当人们想以语言中立的方式使用JSON时。关于序列化,我还认为序列化对象的大小(所需内存)比JSON格式大得多,因为它将存储它正在存储的幻数类以及所有的元信息。过慢基准测试表明内置的序列化速度很慢。即使使用MessagePack,也应该考虑在网络流上压缩数据,从而减少延迟。我只是转到下面的链接,想到流压缩中间件不应该知道网络压缩。但你是对的,如果没有一个网络管理员可以调整路由器、交换机和其他东西,你将不得不在中间件中设计某种网络压缩,这本来不是它的责任。在java中将数据发送到redis之前,您仍然可以使用MessagePack,它应该可以工作。您的链接很有趣,LUA似乎确实是限制bandwith的最佳方式,因为函数在Redis上本地运行,而Redis命令之间没有网络交互。MessagePack看起来很有趣,我们目前使用的系统在Redis中存储java序列化对象,看到统计数据/基准测试,我对MessagePack非常感兴趣。您提到的示例将传入的JSON转换为MessagePack来存储它。我也对MessagePack感兴趣,但首先从客户机以MessagePack格式传输它是否更有意义?