1

我目前有两个排序集,我正在尝试从一组中获取所有分数和成员,并使用它从另一组中删除成员。我使用的模块是 node_redis。

现在我正在尝试通过调用client.zrange()并将回复存储在数组中来获取成员和分数。

我是否正确假设回复将采用数组形式?我意识到redis api说它返回一个“多批量回复”,但这究竟意味着什么?如果它不是一个数组,我将如何使用它?

我还有另一个问题,那就是我可以在使用时使用数组zadd()吗?一个例子是这样的。

client.zadd(historyKey, scores, members, function(err, reply){});

其中分数和成员是数组。

编辑:

我正在处理接收和解析 SNMP 陷阱。基本上我收到一个陷阱并检查它的警报类型。这些陷阱中的有用信息是警报类型和完整的陷阱名称。我检查警报是 0、1 还是 2。

如果它是 1,那么我在收到它时将它存储在我的当前排序集中。如果它是 0 或 2,我知道这种类型的警报已经完成,我需要从当前集中删除所有类似的陷阱,并将它们与我刚刚收到的那个一起放入历史集中。

为了从 Current 中移除陷阱并将它们放入历史记录中,我必须为每个单独的陷阱创建一个单独的集合,以便跟踪它们在 Current 集合中的位置。

也就是说,如果我在时间 1346276537 收到陷阱“RGB Gamut Error(----Bb)”并将其存储在 Current 中,我还将准确的分数和成员存储在一个单独的集合中,其中键为“IPAddress:RGB Gamut Error”。

这样,当我收到名称为“RGB Gamut Error”的警报类型 0 或 2 时,我可以将 IP 地址附加到它的前面,继续执行zrange该设置,然后添加到历史记录并从当前删除。最后删除“IPAddress:RGB Gamut Error”设置,这样我就可以重新开始了。

旁注:我的成员实际上在末尾添加了两个数字,以使每个成员都独一无二并且不会相互覆盖。这真的是唯一的目的。

例如:IPAdress::RGB 色域错误(Rr--Bb):5:46

4

1 回答 1

1

我是否正确假设回复将采用数组形式?

是的,将以数组的形式node_redis给您答复。zrange

我还有另一个问题,那就是我可以在使用 zadd() 时使用数组吗?一个例子是这样的。

不可以。在 redis 2.4 之前,您一次只能发送一个参数(so zadd key score member)。由于 redis 2.4 zadd(和许多其他命令)是variadic,即它们接受任意数量的参数 - 但不是作为数组。你仍然必须这样称呼它:

client.zadd(key, score1, member1, score2, member2, ..., function(err, reply){});

你可以做一些.apply诡计,但你必须先将scoresandmembers数组压缩到一个数组中。

更新:

如果您已经拥有scoresmembers数组,则可以将它们合并为一个数组,如下所示:

var scores = [1, 2, 3],
    members = ['a', 'b', 'c'];

function merge (other) {
  return function (result, current, index) {
    result.push(current, other[index]);
    return result;
  }
}

var merged = scores.reduce(merge(members), []);

// Now merged = [1, 'a', 2, 'b', 3, 'c'];

var args = [key].concat(merged).concat(function(err, reply){});

client.zadd.apply(client, args);
于 2012-08-29T09:39:31.430 回答