2012-06-05 35 views
4

我使用Redis的在我的軌道項目中,我試圖工會的Redis的套狀Redis的未來+ Rails的

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

之一,但它拋出錯誤這樣

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

什麼是Redis::Future ?我使用的Redis和Redis的商店寶石

謝謝你通常返回

回答

6

未來的對象時,方法調用在管道或交易。

返回值僅在EXEC命令已應用於Redis服務器時可用。使用redis-rb,這意味着你應該先退出一個流水線或多塊。

如果要選擇/讀取數據,請在multi/exec塊之前執行,並且只執行multi/exec塊中的寫操作。

順便說一下,使用$ redis.sunion()在服務器端生成結果會更有效率。

+0

從未來,您可以使用value方法訪問底層對象。在https://github.com/redis/redis-rb/blob/master/lib/redis/pipeline.rb查看課程定義 –

4

什麼迪迪埃說,再加上檢查你的代碼是不是一個multi塊內運行,像這樣:

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

在這種情況下,$set1是一個「未來」指向的結果,你會得到如塊就存在了。

您可以通過致電$set1.value訪問實際的基礎價值。