这里我有 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 种乐器,请使用 Set:
SADD user:1:instruments 1 2 3
假设用户有多个仪器,获取仪器的名称是通过
SORT
完成的,如下所示:SORT user:1:instruments BY nosort GET instrument:*->name
关于database - 如何在 Redis 中对哈希值进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077318/