我有一个有 20 个字段的对象 A,我有 100 万个对象 A 实例。
我想将它们存储在 Redis 中,每次都必须检索 100 多个实例。
现在,我有两个解决方案
- 在json中序列化对象A的实例,并存储它使用
SET key json
- 将每个字段存储到一个哈希字段中,每个实例对应一个哈希映射。正如我之前所说,我每次都必须检索 100 多个实例。所以如果我使用redis hash,我必须调用数百个管道
HGETALL key
,它会很慢。所以我想知道我是否可以通过使用哈希来提高速度?
我有一个有 20 个字段的对象 A,我有 100 万个对象 A 实例。
我想将它们存储在 Redis 中,每次都必须检索 100 多个实例。
现在,我有两个解决方案
SET key json
HGETALL key
,它会很慢。所以我想知道我是否可以通过使用哈希来提高速度?这将取决于几件事:
存储序列化对象将占用更多空间,因为您将所有额外的语言特定信息与原始数据一起存储。如果您的 RAM 不足或必须存储大量对象,最好将所有这些数据存储在哈希中。由于您有 100 万行,因此使用散列可能会节省相当多的空间。
我最近遇到了一个非常相似的问题。起初我尝试将序列化的对象存储在 Redis DB 中,但我必须存储超过 500 万个对象,并且每个对象都包含很多我不需要存储在 DB 中的多余数据。这导致了膨胀的 DB 大小并浪费了大量的 RAM。
您的要求可能与我的要求有很大不同,因此最好自己进行基准测试。尝试序列化一个对象,看看结果有多大。将其与键总和的大小进行比较,并比较两者之间的大小差异。如果序列化的对象不大,最好只进行序列化。记住反序列化不是一个微不足道的操作也很好。
字符串和哈希是非常不同的数据类型,它们都有优点和缺点。在你暴露的情况下,你错过了一些非常重要的事情;例如:
仅根据性能做出决定并不是一个好主意,您可能会遗漏一些其他重要方面,例如完整性、可伸缩性和可维护性。