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

标签 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. 请注意,键名区分大小写,因此在调用 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"
    

要创建多个集合,您需要发出单独的 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"
    

另一方面,如果您的用户可以拥有 N 种乐器,请使用 Set:

    SADD user:1:instruments 1 2 3
  1. 假设用户有多个仪器,获取仪器的名称是通过 SORT 完成的,如下所示:

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

关于database - 如何在 Redis 中对哈希值进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077318/

相关文章:

apt-get 使用 Multipass 更新 Ubuntu 20.04 VM 时哈希和不匹配

ruby-on-rails-3 - 在 rails3 中一起使用 mongodb 和 redis

java - 如何使MySQL表的某一列不可见

mysql - 同一个表中的属性之间的关系

在 MacOS X 上使用 crypt 的 Python SHA512 加盐密码

laravel-5 - Laravel 5.5 redis 队列太慢

c# - PooledRedisClientManager 不释放连接

SQL如何处理多对多关系

字段、EAV 等中的 MySQL 多个值

json - 使用 Perl 循环遍历 JSON 数据并打印出一个字段(不是 HASH 引用)