【发布时间】:2021-05-26 01:10:31
【问题描述】:
集合通常不是按性质排序的。但我想知道 Redis 中的 SMEMBERS 是否由确保顺序的数据结构支持。
此简短文档中未记录任何内容:https://redis.io/commands/smembers
而且EVAL中的注释不好理解。
在 Redis 版本 4 中,可能以随机顺序返回元素的命令,如 SMEMBERS(因为 Redis 集是无序的)在从 Lua 调用时具有不同的行为,并在将数据返回到 Lua 脚本之前经过静默的字典排序过滤器。因此 redis.call("smembers",KEYS[1]) 将始终以相同的顺序返回 Set 元素,而从普通客户端调用的相同命令可能会返回不同的结果,即使键包含完全相同的元素。然而,从 Redis 5 开始,不再有这样的排序步骤,因为 Redis 5 以不再需要将非确定性命令转换为确定性命令的方式复制脚本。一般来说,即使在为 Redis 4 开发时,也永远不要假设 Lua 中的某些命令是有序的,而是依赖于您调用的原始命令的文档来查看它提供的属性。
简而言之,redis 是否确保每次调用 SMEMBERS 时结果的顺序?
我们使用的redis版本:
127.0.0.1:6379> info
# Server
redis_version:5.0.3
【问题讨论】:
标签: redis