gpt4 book ai didi

java - Redis 值作为 byte[] 与纯字符串

转载 作者:可可西里 更新时间:2023-11-01 11:09:09 24 4
gpt4 key购买 nike

我正在使用 Redis 作为分布式系统的集中式缓存。目前我正在使用 jedis 连接到 redis 集群,我将值存储为字节 [] 而不是字符串。我的问题是存储纯字符串或字节 [] 是否对获取数据有影响。在我的应用程序中,我序列化我的 java pojo 对象并转换为 byte [],然后存储,因为我可以将它转换为 json 并存储,所以在从 redis 获取它时我可以轻松地使用该对象而不是反序列化。我都试过了,但我能看到的唯一区别是反序列化的额外步骤

最佳答案

在 Redis 中,一切都是 byte[]。 redis所说的字符串,其实就是编程语言中的byte[]。

存储JSON时,仍然需要先序列化为byte[]再存入redis,读回时反过来。这与序列化 java 对象没有什么不同。也就是说,你总是要付出序列化和反序列化的代价。

也就是说,不同的库有不同的序列化成本。众所周知,Java 序列化速度慢且效率低下。 JSON 可能比 Java 序列化更好——但在 Redis 中会浪费内存,因为它是基于文本的。你可以选择一个更好的序列化库。

Kryo是 java 序列化程序的更快替代品。 Message Pack类似于 JSON 但速度更快。 Protocol Buffers/Flat Buffers 甚至更好,但需要您预先声明一个模式。还有其他序列化格式,每种格式都有其优缺点。

一般建议 - 尝试使用 hash 数据类型。它非常高效,让您可以请求特定字段而不是整个对象。仅当哈希对您不起作用时,才根据您的需要选择其他东西。

附言如果您喜欢基准测试,这个网站有几个 - https://github.com/eishay/jvm-serializers/wiki

关于java - Redis 值作为 byte[] 与纯字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51306134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com