我在我的一个 Rails 项目中使用 redis,我试图合并这些 redis 集,比如
$redis.smembers('set1') | $redis.smembers('set2')
但它会抛出这样的错误
undefined method `|' for #<Redis::Future:0x000001306e5830>
是什么Redis::Future
?我正在使用 redis 和 redis-store gems
谢谢
我在我的一个 Rails 项目中使用 redis,我试图合并这些 redis 集,比如
$redis.smembers('set1') | $redis.smembers('set2')
但它会抛出这样的错误
undefined method `|' for #<Redis::Future:0x000001306e5830>
是什么Redis::Future
?我正在使用 redis 和 redis-store gems
谢谢
当在管道或事务中调用方法时,通常会返回未来对象。
仅当 EXEC 命令已应用于 Redis 服务器时,返回值才可用。使用 redis-rb,这意味着您应该先退出流水线或多块。
如果要选择/读取数据,请在 multi/exec 块之前执行,并且只在 multi/exec 块中写入。
顺便说一句,使用 $redis.sunion() 在服务器端生成结果会更有效。
Didier 所说的,以及检查您的代码是否未在multi
块内运行,如下所示:
$redis.multi do
$set1 = $redis.smembers("set1")
end
在这种情况下,$set1
是一个“未来”,它指向一旦块存在就会得到的结果。
您可以通过调用来访问真实的底层价值$set1.value
。