redis查询结果顺序

标签 redis

我对redis查询返回结果顺序的判断正确性有些怀疑,尤其是hgetall的

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

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

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

有人看过有关该主题的官方 redis 文章吗?

非常感谢!

最佳答案

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

考虑使用SCAN或类似的。

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

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

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

  1. 使用排序集。总的来说:这很快。
  2. 使用SORT函数。一般来说:这很慢。
  3. 使用 Lua 服务器端脚本,结合 1 和/或 2

希望这对台湾有帮助

关于redis查询结果顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23133199/

相关文章:

Redis 将 id 存储在列表/集合中

Python-Redis : Best practice serializing objects for storage in Redis

node.js - 使用 Socket.io 向一个用户发送消息

php - 为什么 Laravel 广播事件总是使用 "laravel_database_channel" channel 以及如何更改它?

java - 编码 ISO-8859-5 的 jedis 或 redis 问题

json - Redis/Rejson 嵌套文档层次结构性能

python - 哈希内存使用率高于 instagram 测试结果

wordpress - 是否有一个易于安装的自托管 wordpress 解决方案(可能有多个站点)

nosql - 将数据保存到内存中,一段时间后将它们保存到数据库中

redis - 服务栈.Redis : Unable to Connect: sPort: 0