Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构造Redish哈希存储的首选方法_Redis - Fatal编程技术网

构造Redish哈希存储的首选方法

构造Redish哈希存储的首选方法,redis,Redis,我有很多东西;每个对象都属于一个或多个类别。对于每个对象,我都有一个表示相关对象类别对属性的序列化字符串 我想设置一个存储来检索这些属性,知道类别id和对象id。我可以通过以下方式设置存储: 1:键越少,每个键的字段越多 拥有一个哈希category:{category\u id},对于每个键,该哈希存储一个值,该值的字段名object\u id和字段值设置为该对象类别对的json字符串化属性 2:多个键,每个键一个字段 拥有一个hashcategory对象:{category_id}-{

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

我想设置一个存储来检索这些属性,知道类别id和对象id。我可以通过以下方式设置存储:

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

  • 拥有一个哈希
    category:{category\u id}
    ,对于每个键,该哈希存储一个值,该值的字段名
    object\u id
    和字段值设置为该对象类别对的json字符串化属性
2:多个键,每个键一个字段

  • 拥有一个hash
    category对象:{category_id}-{object_id}
    ,对于每个键,它存储一个与该类别对象对的json字符串化属性相等的字段
我想比较这两种方法的性能,但我找不到任何有意义的区别。一种方法比另一种方法有什么优势吗


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

使用一个键(
category-object:{category\u-id}-{object\u-id}
),使用
SET
GET
命令,比使用键名
category:{category\u-id}的散列,性能会稍好一些
和字段名
{object\u id}
使用
HSET
HGET
命令

GET
HGET
都是时间复杂度O(1)。第一个(
GET
)将对键名运行一次哈希函数,然后在哈希映射上查找一次。第二个(
HGET
)将执行两次相同的操作。因此略有不同

但是,除了往返时间之外,这个差异是可以忽略的,我不会把它作为设计决策的标准

相反,其他标准将是:

  • 我是否需要获取给定类别的所有对象?然后使用第一种方法,因为一个命令将获得(
    HGETALL
    ),而在第二种方法中,您将需要
    扫描
    ,然后
    获取
  • 我是否需要让给定的
    {category\u id}-{object\u id}
    过期?这意味着第二种方法,因为您不能使散列的字段过期
  • 我是否需要获取给定对象的所有
    {category\u id}-{object\u id}
    值?这可能会使第二种方法的天平倾斜,因为在那里我只需要
    扫描
    。在第一种方法中,我需要对每个结果进行
    扫描
    ,然后
    HSCAN
如果要运行一些实际的基准测试,请参阅