Redis是否保证mget返回订单?

egdjgwm8  于 2023-05-16  发布在  Redis
关注(0)|答案(2)|浏览(210)

考虑到这个简单的块:

mget object:1 object:2 object:3

redis是否保证返回顺序总是[object:1,object:2,object:3]
我使用的是标准的ruby redis client(v3.3.0),所以它应该返回与redis完全一样的结果,而且不会影响任何东西。

bqf10yzr

bqf10yzr1#

虽然文档没有明确说明这一点,但我认为它确实保证了顺序。如果没有的话,这将是一个非常无用的命令。

inkz8wg9

inkz8wg92#

由于Redis集群被广泛使用,我不得不在这里做一个说明:

  • mget在Redis独立模式下确实保证了订单,就像@Sergio的回答所说的那样

但在Redis集群中,是客户端库决定了结果的顺序。显然,他们中的一些人不做保证,例如,vert.x redis client。关于source code

addReducer(MGET, list -> {
      int total = 0;
      for (Response resp : list) {
        total += resp.size();
      }

      MultiType multi = MultiType.create(total, false);
      for (Response resp : list) {
        for (Response child : resp) {
          multi.add(child);
        }
      }

      return multi;
    });

我们可以看到它只是合并了来自每个节点的mget结果,因此这里没有提供顺序保证。

相关问题