我正在使用redis作为分布式系统的集中式缓存。目前,我正在使用jedis连接到Redis集群,在这里我将值存储为byte []而不是字符串。我的问题是,存储纯字符串或字节[]是否会影响数据的获取。在我的应用程序中,我序列化我的java pojo对象并转换为byte [],然后存储,因为我可以将其转换为json并存储,因此在从redis获取它的同时,我可以轻松地使用该对象而不是反序列化。我都尝试过,但是我唯一看到的区别是反序列化的额外步骤
答案 0 :(得分:3)
在Redis中,一切都是byte[]
。 Redis所谓的字符串实际上是编程语言中的byte []。
存储JSON时,在保存到Redis之前,仍然需要将其序列化为byte [],并在读回时进行相反的操作。这与序列化Java对象没有什么不同。换句话说,您始终必须支付序列化和反序列化的费用。
也就是说,不同的库具有不同的序列化成本。众所周知,Java序列化是缓慢且效率低下的。 JSON可能比Java序列化更好-但由于它是基于文本的,因此浪费了Redis的内存。您可以选择更好的序列化库。
Kryo是Java序列化程序的快速替代方法。 Message Pack类似于JSON,但速度更快。协议缓冲区/平面缓冲区甚至更好,但是需要您预先声明架构。还有其他序列化格式,每种都有其取舍。
一般建议-尝试使用hash
数据类型。它非常有效,可以让您请求特定字段而不是整个对象。仅当哈希对您不起作用时,才根据您的需要选择其他内容。
P.S。如果您要进行基准测试,则该网站有多个-https://github.com/eishay/jvm-serializers/wiki