当前位置: 首页 > 知识库问答 >
问题:

redis查询结果顺序

郎弘业
2023-03-14

对于redis查询返回结果顺序的判断,我有些怀疑,特别是对于hgetall查询

例如,我将一些数据按其枚举的顺序放入数据库:

"key:1" {...} 
"key:3" {...}
"key:10" {...}
"key:2" {...}

不带任何其他参数的“keys key:*”命令是否总是按照数据在数据库中出现的顺序返回该数据,还是会尝试以任何方式对数据进行排序?

共有1个答案

骆文华
2023-03-14

如果需要解决方案具有可伸缩性('N'键,其中N可以增长),则不应在生产中使用keys语句。

请考虑使用scan或类似的方法。

您提到hgetall,这在某些场景中可能是有效的,但有一个O(N)的大O。如果无法预测哈希集中有多少成员,并且/或者是大量成员,请改用hscan

关于订单:没有任何保证。这是一本使用散列的字典。这同样适用于扫描。首先获取所有这些,然后在客户端应用排序。

如果需要服务器端排序,Redis提供了两三种机制:

  1. 使用排序集。总的来说:这是快速的。
  2. 使用排序函数。总的来说:这很慢。
  3. 使用Lua服务器端脚本,结合1和/或2
 类似资料:
  • 问题内容: 我有一个联合查询,它从两个不同的总体中获取计数。如何强制结果按查询中写入的顺序而不是升序/降序返回? 我希望第一个结果始终作为第一行返回。这可能吗? 问题答案: 您必须使用ORDER BY子句指定订单。在您的示例中,您可以执行以下操作:

  • 要运行查询,在工具栏中点击 运行 。如果查询语句是正确的,该查询将被运行,如果该查询应该返回数据,结果 选项卡会打开查询返回的数据。如果运行查询时发生错误,运行停止,显示相应的错误信息。 结果 选项卡以网格显示查询返回的结果数据。数据可以用两种模式显示:网格查看 和 表单查看。详细信息请看表查看 器。 提示:Navicat 支持返回 10 个结果集。 注意:你可以通过选择 查看 -> 显示结果 -

  • 你可以在任何的服务器运行查询。在工具栏的下拉式列表中选择目标服务器和数据库。然后点击 “运行”。如果该查询语句是正确的,它将被运行。如果该查询应该返回数据,“结果”选项卡会打开并显示返回的数据。如果运行查询时发生错误,运行会停止并显示相应的错误信息。 “结果”选项卡以网格显示查询返回的结果数据。数据可以用三种模式显示:网格视图、树视图和 JSON 视图。详细信息请参阅数据查看器。 【注意】Navi

  • 你可以在任何的服务器运行查询。在工具栏的下拉式列表中选择目标服务器、数据库和/或模式。然后点击 “运行”。如果该查询语句是正确的,它将被运行。如果该查询应该返回数据,“结果”选项卡会打开并显示返回的数据。如果运行查询时发生错误,运行会停止并显示相应的错误信息。 “结果”选项卡以网格显示查询返回的结果数据。数据可以用两种模式显示:网格视图和表单视图。详细信息请参阅数据查看器。 【注意】Navicat

  • 你可以在任何的服务器运行查询。在工具栏的下拉式列表中选择目标服务器和数据库。然后点击 。如果该查询语句是正确的,它将被运行。如果该查询应该返回数据,“结果”选项卡会打开并显示返回的数据。如果运行查询时发生错误,运行会停止并显示相应的错误信息。 “结果”选项卡以网格显示查询返回的结果数据。数据可以用三种模式显示:网格视图、树视图和 JSON 视图。详细信息请参阅数据查看器。 【注意】Navicat

  • 你可以在任何的服务器运行查询。在工具栏中,从下拉式菜单选择目标服务器、数据库和/或模式。然后点击 。如果该查询语句是正确的,它将被运行。如果该查询应该返回数据,“结果”选项卡会打开并显示返回的数据。如果运行查询时发生错误,运行会停止并显示相应的错误信息。 “结果”选项卡以网格显示查询返回的结果数据。数据可以用两种模式显示:网格视图和表单视图。详细信息请参阅数据查看器。 【注意】Navicat 支持