Performance redis哈希性能如何

Performance redis哈希性能如何,performance,hash,redis,Performance,Hash,Redis,我有一个对象A,它有20个字段,我有100万个对象A的实例 我想将它们存储在Redis中,每次都要检索100多个实例 现在,我有两个解决方案 在json中序列化对象A的实例,并使用SET key json 将每个字段存储到一个哈希字段中,每个实例对应一个哈希映射。正如我之前所说的,我每次必须检索100多个实例。因此,如果我使用redis哈希,我必须使用数百个HGETALL键调用管道,这将非常缓慢。所以我想知道我是否可以通过使用散列来提高速度 这将取决于以下几点: 您的Redis服务器有多少RAM

我有一个对象A,它有20个字段,我有100万个对象A的实例

我想将它们存储在Redis中,每次都要检索100多个实例

现在,我有两个解决方案

  • 在json中序列化对象A的实例,并使用
    SET key json
  • 将每个字段存储到一个哈希字段中,每个实例对应一个哈希映射。正如我之前所说的,我每次必须检索100多个实例。因此,如果我使用redis哈希,我必须使用数百个
    HGETALL键调用管道,这将非常缓慢。所以我想知道我是否可以通过使用散列来提高速度
    
    这将取决于以下几点:

  • 您的Redis服务器有多少RAM可用
  • 要存储多少个对象
  • 序列化对象及其字段的大小
  • 存储序列化对象将占用更多的空间,因为所有额外的特定于语言的信息都与原始数据一起存储。如果您缺少RAM或必须存储大量对象,那么最好将所有这些数据存储在散列中。由于您有一百万行,使用哈希可能会节省大量空间

    我最近遇到了一个非常类似的问题。起初,我尝试将序列化对象存储在Redis DB中,但我必须存储500多万个对象,每个对象都包含大量多余的数据,而我不需要将这些数据存储在DB中。这导致数据库容量过大,浪费了大量内存


    您的需求可能与我的需求有很大差异,因此最好自己进行基准测试。尝试序列化一个对象,看看结果有多大。将其与键和的大小进行比较,并比较两者之间的大小差异。如果序列化的对象没有大多少,最好只是序列化。记住,非序列化不是一个可以忽略的操作也是一件好事。

    字符串和哈希是非常不同的数据类型,两者都有优点和缺点。在你暴露的情况下,你遗漏了一些非常重要的事情;例如:

    • 你打算多久写一次钥匙
    • 您是否需要检索100个项目来聚合它们?在这种情况下,用聚合值存储哈希是没有意义的,所以检索只执行一次
    • 这是一个重写还是重读的应用程序
    • 你需要原子化的写作吗?换句话说,在Redis中,两个同时请求是否可以更新相同的值?如果是这样,您将如何保证存储JSON字符串不会导致竞争条件
    仅基于性能做出决策不是一个好主意,您可能会遗漏一些其他重要方面,如完整性、可扩展性和可维护性。

    可能重复的