在 redis 中使用集合中的散列进行排序

查尔斯

我们以这种方式使用 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 仅标记事务块的开始。后续命令将使用 EXEC 排队等待原子执行。

  2. 当我使用键 key 创建哈希时:key:key 是无关紧要的,如果我使用 : 或 , or - 以及 redis 中最重要的,我们没有根据文档创建结构树:https : //redis.io/topics /数据类型介绍

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

  1. exec 只执行所有的句子,因为这些原因应该是一样的,无论是有 multi 还是没有 multi。

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

伊塔马尔·哈伯

现在我们正在使用命令 SORT

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

我们永远不会得到结果,集合中的哈希值为 null,我不明白为什么?

问题在于您如何调用SORT和指定 GET 和 BY 子句。由于您的 Set 成员是完整的 (Hash) 键名称,因此您应该如何使用示例数据执行此操作:

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的使用(或缺少)无关

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章