2015-03-31 38 views
0

我知道使用多執行redis命令是延遲,直到塊完成。批/帶redis總結不同的鍵

如何使用多個(或類似的)發送一個redis請求,但仍然能夠使用返回的數據進行計算?

示例 - 用戶有很多朋友。每個朋友都有自己的一組朋友。我想統計每個用戶有多少朋友朋友(有重複)

$redis.multi do 
    friends_of_friends = user.friends.map(&:friends_count) 
end 

friend_of_friends.inject(&:+) 

是可能的嗎?

回答

0

你試圖達到的主要目標是什麼? MULTI/EXEC確保大量命令作爲一個塊(即原子)執行 - 因此嘗試讀取並根據響應進行寫操作是不可能的。

使用Redis執行此操作的方法是使用WATCH指令獲得樂觀鎖定 - 如果更改了WATCH鍵,EXEC將會出錯。或者,您應該考慮使用Lua腳本來嵌入讀取邏輯 - 這將確保原子性,需要向Redis發送一個請求,並節省網絡開銷。