4

我在我的一个 Rails 项目中使用 redis,我试图合并这些 redis 集,比如

$redis.smembers('set1') | $redis.smembers('set2') 

但它会抛出这样的错误

undefined method `|' for #<Redis::Future:0x000001306e5830>

是什么Redis::Future?我正在使用 redis 和 redis-store gems

谢谢

4

2 回答 2

6

当在管道或事务中调用方法时,通常会返回未来对象。

仅当 EXEC 命令已应用于 Redis 服务器时,返回值才可用。使用 redis-rb,这意味着您应该先退出流水线或多块。

如果要选择/读取数据,请在 multi/exec 块之前执行,并且只在 multi/exec 块中写入。

顺便说一句,使用 $redis.sunion() 在服务器端生成结果会更有效。

于 2012-06-05T12:20:52.293 回答
4

Didier 所说的,以及检查您的代码是否未在multi块内运行,如下所示:

$redis.multi do
  $set1 = $redis.smembers("set1")
end

在这种情况下,$set1是一个“未来”,它指向一旦块存在就会得到的结果。

您可以通过调用来访问真实的底层价值$set1.value

于 2012-06-19T01:48:47.713 回答