如何在Redis中对哈希值进行排序?

时间:2015-01-21 21:37:24

标签: database hash redis nosql

这里我有3个哈希,我用sadd来定义关系

 hmset user:1 name Jack
 hmset category:1 name music
 hmset instrument:1 name guitar 

 sadd user:1:category 1 sadd category:1:instrument 1

所以在这种情况下,如果我想获得用户的工具,应该怎么写我的命令?这没工作

Sort User:1:Category:Instrument Get Category*:->Instrument 

1 个答案:

答案 0 :(得分:2)

首先,从您的问题中不清楚您正在尝试做什么 - 或许添加有关数据结构的更多详细信息以及您正在寻找的最终结果会有所帮助。尝试解释用户,类别和工具实体之间的关系以及您希望运行的查询类型。

尽管如此,有几个问题显而易见:

  1. 请注意,键名称区分大小写,因此在调用SORT(或任何相关命令)时,请确保使用与创建键时相同的键名称。这意味着fooFooFOOFoO都是不同的密钥名称。

  2. 您的SADD语句将生成包含以下内容的单个集:

    127.0.0.1:6379> sadd user:1:category 1 sadd category:1:instrument 1
    (integer) 3
    127.0.0.1:6379> smembers user:1:category
    1) "category:1:instrument"
    2) "1"
    3) "sadd"
    
  3. 要创建多个集合,您需要为每个集合发出一次单独的SADD命令。

    1. 使用集合表示1:N关系,例如用户可以拥有多种乐器。要表达1:1关系,只需在哈希中添加一个字段,即:

      127.0.0.1:6379> hmset user:1 name Jack instrument 1
      OK
      127.0.0.1:6379> hgetall user:1
      1) "name"
      2) "Jack"
      3) "instrument"
      4) "1"
      
    2. 另一方面,如果您的用户可以使用N台乐器,请使用Set:

          SADD user:1:instruments 1 2 3
      
      1. 假设用户有多个乐器,请使用SORT来完成乐器的名称,如下所示:

        SORT user:1:instruments BY nosort GET instrument:*->name