gpt4 book ai didi

redis - 构建 Redish 哈希存储的首选方式

转载 作者:行者123 更新时间:2023-12-03 06:42:43 25 4
gpt4 key购买 nike

我有许多对象;每个对象属于一个或多个类别。对于每个对象,我都有一个序列化的字符串,表示相关对象-类别对的属性。

我想建立一个商店来检索这些属性,知道类别 ID 和对象 ID。我可以通过以下方式设置商店:

1:更少的键,每个键更多的字段

  • 有一个哈希category:{category_id}对于每个键,存储一个具有字段名称的值 object_id和字段值设置为该对象-类别对的 json-stringified 属性。

  • 2:更多键,每个键一个字段
  • 有一个哈希category-object:{category_id}-{object_id}对于每个键,存储一个等于该类别-对象对的 json 字符串化属性的字段。

  • 我想比较这两种方法的性能属性,但我找不到任何有意义的差异。一种方法比另一种方法有什么优势吗?

    请注意,值存储是给定的 - 存储的值需要是 json 字符串化的属性。

    最佳答案

    您应该期望使用 category-object:{category_id}-{object_id} 的一键 ( SET ) 获得更好的性能和 GET命令,而不是带有键名的哈希 category:{category_id}和字段名称{object_id}使用 HSETHGET命令。

    两个GETHGET是时间复杂度 O(1)。第一个( GET )将对键名运行一次散列函数,然后在散列映射上查找一次。第二个( HGET )将做同样的事情两次。因此略有不同。

    但是,除了往返时间之外,这种差异可以忽略不计,我不会将其用作设计决策的标准。

    相反,其他标准将是:

  • 我是否需要获取给定类别的所有对象?然后使用第一种方法,因为一个命令将为您提供( HGETALL ),而在第二种方法中,您需要 SCAN然后 GET .
  • 我是否需要 EXPIRE给定的 {category_id}-{object_id} ?这意味着第二种方法,因为您不能使哈希字段过期。
  • 我是否需要获得所有 {category_id}-{object_id}给定对象的值?这可能会使第二种方法的平衡倾斜,因为我只需要 SCAN .在第一种方法中,我需要 SCAN然后 HSCAN在每个结果上。

  • 如果您想运行一些实际的基准测试,请参阅 How fast is Redis?

    关于redis - 构建 Redish 哈希存储的首选方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59994938/

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