Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 使用集合中的哈希对redis中的集合进行排序_Sorting_Hash_Redis_Set_Redis Cli - Fatal编程技术网

Sorting 使用集合中的哈希对redis中的集合进行排序

Sorting 使用集合中的哈希对redis中的集合进行排序,sorting,hash,redis,set,redis-cli,Sorting,Hash,Redis,Set,Redis Cli,我们使用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:ite

我们使用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"
sadd redishop:list-all redishop:items:Articulo3
sadd redishop:list-all redishop:items:Articulo2
sadd redishop:list-all redishop:items:Articulo1
我检查了redis中的结构是否创建正常,这些是:

hgetall redishop:items:Articulo3
现在,我们以以下方式在集合中添加哈希:

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"
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
通过这种方式,命令排序可以完美地工作,散列被插入到集合中,但我不明白为什么在redis文档的基础上:

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

  • 当我用key:key:key创建散列时,如果我使用:or,or,key:key是无关紧要的-在redis中,最重要的是,我们没有根据文档创建结构树:

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

  • exec只执行所有的句子,因为这些原因应该是相同的,可以使用multi,也可以不使用multi
  • 请在这个问题上提供任何帮助或解释都会大有帮助。 提前谢谢

    现在我们正在玩命令排序

    当心的时间复杂性和内存需求,我通常建议不要使用它

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

    问题在于如何调用和指定GET和BY子句。由于集合的成员是完整的(散列)键名,下面是如何使用示例数据:

    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"
    
    通过这种方式,命令排序可以完美地工作


    在本例中,您只使用键名的“id”部分填充集合,因此GET和BY子句映射到实际数据。澄清一下,这与
    MULTI
    块的使用(或缺乏)无关。

    我继续,但不理解,对不起。此外,更重要的是,为什么如果我在集合中插入块MULTI之间的散列,我可以用我的密钥的最后一个id引用它,并按照我的意愿进行排序,但如果我用MULTI进行相同的操作,我就不能这样做?我很抱歉,但我不明白工具中看起来像个bug。如果同一组我有一个带有redishop:item:cars键的散列,另一个带有redishop:itemsBig:truck键的散列,我想要卡车的价格,会发生什么。我能做吗?也许在文件中有任何参考,我不这么认为。。。。。。因为最奇怪的是,如果我在multi-block和引用我钥匙的最后一个id之间做相同的操作,以后我可以根据需要使用SORT。但是如果我尝试在multi中做相同的操作,即hmset car:1 name“X”price 3000,然后将sadd mylist 1,我在集合中添加了其他与汽车不同的东西:1但如果我做了相同的东西,但成了多块,我可以做,我不明白为什么,也许这是工具redis cli中的一个错误?对不起,我不明白最后一条评论中的问题。也许可以尝试一个新问题,这个问题只关注那个问题。