我对redis查询返回结果顺序的判断正确性有些怀疑,尤其是hgetall的
例如,我按照枚举顺序将一些数据放入数据库:
"key:1" {...}
"key:3" {...}
"key:10" {...}
"key:2" {...}
不带任何其他参数的“KEYS key:*”命令是否始终按照数据在数据库中出现的顺序返回该数据,还是会尝试以任何方式对数据进行排序?
有人看过有关该主题的官方 redis 文章吗?
非常感谢!
最佳答案
如果您需要解决方案可扩展(“N”个键,其中 N 可以增长),则不应在生产中使用 KEYS
语句。
考虑使用SCAN
或类似的。
你提到了HGETALL
,这在某些情况下可能是有效的,但是有一个O(N)的Big-O。如果您无法预测哈希集中有多少个成员,和/或成员数量较多,请改用 HSCAN
。
关于订单:没有任何保证。这是一个使用哈希的字典。这同样适用于KEYS
和SCAN
。首先获取所有这些,然后在客户端应用排序。
如果需要服务器端排序,Redis提供了两种或三种机制:
- 使用排序集。总的来说:这很快。
- 使用
SORT
函数。一般来说:这很慢。 - 使用 Lua 服务器端脚本,结合 1 和/或 2
希望这对台湾有帮助
关于redis查询结果顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23133199/