1

我们以这种方式使用 REPL redis-cli 在 redis 中创建了 3 个哈希:

hmset redishop:items:Articulo1 artist "Martin Wessely" price 12.99 name "Handcrafted Trees Mug" 
hmset redishop:items:Articulo2 artist "Martin Wessely" price 13.99 name "Handcrafted Trees Mug"
hmset redishop:items:Articulo3 artist "Martin Wessely" price 14.99 name "Handcrafted Trees Mug"

我检查了在 redis 中创建的结构是否正常,这些都在那里:

hgetall redishop:items:Articulo3

现在我们以这种方式将哈希添加到集合中:

sadd redishop:list-all redishop:items:Articulo3
sadd redishop:list-all redishop:items:Articulo2
sadd redishop:list-all redishop:items:Articulo1

现在我们正在使用命令 SORT:

SORT redishop:list-all BY redishop:items:*->price
SORT redishop:list-all BY redishop:items:*->price GET redishop:items:*->price
SORT redishop:list-all BY redishop:items:*->price GET # GET redishop:items:*->price

我们从来没有得到结果,集合中的哈希值为 null,我不明白为什么?

另一方面,如果我们创建哈希并以其他方式设置:

multi
hmset redishop:items:Articulo1 artist "Martin Wessely" price 12.99 name "Handcrafted Trees Mug" 
sadd redishop:list-all Articulo1
hmset redishop:items3:Articulo2 artist "Martin Wessely" price 13.99 name "Handcrafted Trees Mug"
sadd redishop:list-all Articulo2
hmset redishop:items3:Articulo3 artist "Martin Wessely" price 14.99 name "Handcrafted Trees Mug"
sadd redishop:list-all Articulo3
exec

通过这种方式,命令 SORT 可以完美运行并将哈希插入集合中,但我不明白为什么在 redis 文档的基础上:

  1. 命令 multi only 标记事务块的开始。后续命令将排队等待使用 EXEC 进行原子执行。

  2. 当我使用键 key:key:key 创建哈希时,如果我使用 : 或,或 - 和 redis 中最重要的,我们不会根据文档创建结构树: https ://redis.io/topics /数据类型介绍

他们告诉您更好或更好的方法包括:或点,但他们不会告诉您他正在创建结构树。然后我不明白为什么当你在集合中添加哈希时,如果类型 Articulo1 而不是 redishop:items:Articulo1 是好的,但在其他情况下是错误的????事实上,当你输入 hgetall Articulo1 时,你会收到一个 null 但是当你输入 hgetall redishop:items:Articulo1 时,你会得到所有的 fels 一个值。这太奇怪了。

  1. exec 只执行所有的句子,因为这些原因应该是相同的,使它与 multi 或没有 multi。

请有关该主题的任何帮助或解释都会有很大帮助。提前致谢。

4

1 回答 1

2

现在我们正在使用命令 SORT

注意SORT的时间复杂度和内存要求,我通常建议不要使用它。

我们从来没有得到结果,集合中的哈希值为 null,我不明白为什么?

问题在于您如何调用SORT和指定 GET 和 BY 子句。由于您的 Set 的成员是完整的(哈希)键名,因此您应该如何处理示例数据:

127.0.0.1:6379> SORT redishop:list-all BY *->price
1) "redishop:items:Articulo1"
2) "redishop:items:Articulo2"
3) "redishop:items:Articulo3"
127.0.0.1:6379> SORT redishop:list-all BY *->price GET *->price
1) "12.99"
2) "13.99"
3) "14.99"

通过这种方式,命令 SORT 可以完美运行

在这种情况下,您仅使用键名的“id”部分填充 Set,因此 GET 和 BY 子句映射到实际数据。澄清一下,这与块的使用(或缺少)无关MULTI

于 2017-11-05T13:09:44.297 回答