2017-01-13 63 views
0

我正在使用Ruby gem https://github.com/redis/redis-rb如何在Ruby中使用Redis管道進行循環?

我想用管道在Redis服務器的1個網絡中發送多個Redis命令。我如何做到這一點,如果我有一個循環?

例如,這會工作嗎?或者它只是簡單地發送所有的命令?

cache = Redis.new() #blah blah 

normalized = cache.pipelined do 
     urls.each do |url| 
      key= "key:#{url}"  
      cache.get(key) 
      key2 = "key2:#{url}" 
      cache.get(key2) 
     end 
    end 

回答

1

短語「一次網絡之旅」是一個誤解。所有流水線模式都是在等待前一個結果的同時發送其他命令。這與每個請求阻塞直到完成的默認情況相反。

如果這個Ruby庫阻塞,那麼它會按順序發出它們,我相信它阻塞任何需要結果的東西。有一些異步庫可以更好地利用流水線模式,因爲它更容易將結果與該模型中的變量進行匹配。這也是很多工作。

通常,您使用pipelined來執行多個分配,而不是檢索。這樣你就不需要等到INCR的結果完成後才能轉到下一個,那麼你就可以開始忘記。

如果您想快速檢索,請使用MGET

+0

謝謝。這對我來說是一個DOH時刻。爲什麼哦爲什麼沒有人從一開始就告訴我關於MGET的事情?嚴重的是,這存在?! –

+0

Redis文檔非常有趣,我強烈建議您查看所有各種命令以查看那裏的整潔工具。當你找到一個完全符合你想要的東西的時候,這往往令人驚喜。 – tadman

相關問題