Redis Future + Rails

时间:2012-06-05 11:51:54

标签: ruby-on-rails redis

我在我的一个rails项目中使用redis,我尝试将redis集合作为

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

但它会像这样抛出错误

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

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

谢谢

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:4)

Didier说了什么,并检查您的代码是否未在multi块中运行,如下所示:

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

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

您可以通过调用$set1.value来访问真实的基础值。