Redis值作为byte[]或纯字符串的区别

4

我正在将redis用作分布式系统的集中式缓存。目前,我正在使用jedis连接到redis集群,在那里我将值存储为byte []而不是字符串。我的问题是,存储纯字符串或byte []对获取数据有影响吗?在我的应用程序中,我将序列化的java pojo对象转换为byte [],然后进行存储,而我可以将其转换为json并进行存储,因此在从redis获取它时,我可以直接使用对象而不是反序列化。我尝试过两种方法,但唯一的区别是多了一个反序列化步骤。

1个回答

13
在Redis中,一切都是byte[]。Redis所谓的字符串实际上在编程语言中是字节数组。
当您存储JSON时,仍然需要将其序列化为byte[],然后保存到Redis中,并在读取时执行反向操作。这与序列化Java对象没有任何区别。换句话说,您总是要支付序列化和反序列化的代价。
话虽如此,不同的库有不同的序列化成本。Java序列化已知速度较慢、效率低下。JSON可能比Java序列化更好 - 但会在Redis中浪费内存,因为它是基于文本的。您可以选择更好的序列化库。 Kryo是Java序列化器的更快替代品。 Message Pack类似于JSON,但速度更快。协议缓冲区 / 平面缓冲区甚至更好,但需要预先声明模式。还有其他序列化格式,每种格式都有其权衡。
一般建议-尝试使用hash数据类型。它高效且允许您请求特定字段而不是整个对象。只有当哈希不适用于您时,根据您的需求选择其他选项。

附言:如果你对基准测试感兴趣,这个网站有很多:https://github.com/eishay/jvm-serializers/wiki


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接