我使用 redis 作为分布式系统的集中缓存。目前我正在使用 jedis 连接到 redis 集群,在那里我将值存储为字节 [] 而不是字符串。我的问题是存储纯字符串或字节 [] 对获取数据有影响。在我的应用程序中,我序列化了我的 java pojo 对象并转换为字节 [] 然后存储,因为我可以将它转换为 json 并存储,所以在从 redis 获取它时,我可以很容易地使用该对象而不是反序列化。我都试过了,但我能看到的唯一区别是反序列化的额外步骤
在 Redis 中,一切都是byte[]
. redis 所谓的字符串实际上是编程语言中的 byte[] 。
存储JSON的时候,在保存到redis之前还是需要序列化成byte[],回读的时候反过来做。这与序列化 java 对象没有什么不同。换句话说,您总是要支付序列化和反序列化的成本。
也就是说,不同的库有不同的序列化成本。众所周知,Java 序列化速度缓慢且效率低下。JSON 可能比 java 序列化更好 - 但在 redis 中浪费内存,因为它是基于文本的。您可以选择更好的序列化库。
Kryo是 Java 序列化程序的更快替代品。Message Pack类似于 JSON,但速度更快。Protocol Buffers / Flat Buffers 甚至更好,但需要您预先声明模式。还有其他序列化格式,每种格式都有其权衡。
一般建议 - 尝试使用hash
数据类型。它是高效的,并允许您请求特定字段而不是整个对象。只有当 hash 不适合你时,根据你的需要选择其他东西。
PS如果你喜欢基准测试,这个网站有几个 - https://github.com/eishay/jvm-serializers/wiki
归档时间: |
|
查看次数: |
4187 次 |
最近记录: |