redis查询结果顺序

时间:2014-04-17 12:32:21

标签: redis

我对redis Query的返回结果顺序的正确判断有一些疑问,特别是对于hgetall的判断

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

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

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

有没有人看过关于这个主题的官方redis文章?

非常感谢!

1 个答案:

答案 0 :(得分:2)

如果您的解决方案需要可扩展('N'键,其中N可以增长),则不应在生产中使用KEYS语句。

考虑使用SCAN或类似内容。

你提到HGETALL,这在某些情况下可能有效,但有一个O(N)的Big-O。如果您无法预测哈希集中有多少成员,和/或它是大量成员,请改用HSCAN

关于订单:无法保证。这是一个使用哈希的字典。这同样适用于KEYSSCAN。首先获取所有这些,然后应用客户端订购。

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

  1. 使用排序集。一般来说:这很快。
  2. 使用SORT功能。一般来说:这很慢。
  3. 使用Lua服务器端脚本,结合使用1和/或2
  4. 希望这有帮助,TW