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

Database 如何在Redis中对哈希值进行排序?,database,hash,redis,nosql,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*:->

这里我有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 

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

也就是说,有几个问题是显而易见的:

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

  • 您的
    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"
    
  • 要创建多个集合,您需要发出单独的
    SADD
    命令,每个集合一次

  • 使用集合来表示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"
    
  • 另一方面,如果您的用户可以拥有N台仪器,请使用一套:

        SADD user:1:instruments 1 2 3
    
  • 假设一个用户有多个仪器,则可通过
    SORT
    获取仪器名称,如下所示:

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

  • 谢谢你的回答。我想建立这两种关系;用户类别和类别工具。(我使用sadd进行这些)。我正在寻找一个命令,可以为用户获取相关仪器:1。当然,SADD用户:1:instruments 1 2 3和排序用户:1:instruments BY nosort get instrument:->name运行良好。但我想知道,我真的需要用户和仪器之间的关系才能获取仪器的名称吗?为什么我要问这个问题,因为已经有了用户类别和类别-仪器之间的关系。如果要存储可在用户之间共享的仪器集合,则该类别非常有用。使用user->category->instruments(用户->类别->仪器)关系获取仪器名称不能通过调用
    SORT
    -您必须在其前面加上
    HGET user category
    ,并使用该值获取为
    SORT
    类别设置的仪器。