【问题标题】:is Redis SMEMBERS deterministic?Redis SMEMBERS 是确定性的吗?
【发布时间】: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


    【解决方案1】:

    不,结果不是确定性的。

    我想知道 Redis 中的 SMEMBERS 是否由确保顺序的数据结构支持。

    底层数据结构为HASH表,无序。

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 2011-12-31
      • 2012-05-13
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多