我在我的一个rails项目中使用redis,我尝试将redis集合作为
$redis.smembers('set1') | $redis.smembers('set2')
但它会像这样抛出错误
undefined method `|' for #<Redis::Future:0x000001306e5830>
什么是Redis::Future
?我正在使用redis和redis-store gems
谢谢
答案 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
来访问真实的基础值。