2012-08-28 40 views
1

接收應答我現在有兩個排序組和我試圖從一組獲得的所有成績和成員,並用它來從另一組中刪除成員。我正在使用的模塊是node_redis。從Redis的ZRANGE

現在我想通過調用client.zrange()和存儲陣列中的答覆讓成員和分數。

我正確的假設答覆將以數組形式?我意識到redis api表示它會返回一個「Multi-bulk reply」,但是這個意思到底是什麼意思,如果它不是數組,它將如何使用它?

我也有另外一個問題,那就是我可以用一個陣列使用zadd()什麼時候? 一個例子就是這樣。

client.zadd(historyKey, scores, members, function(err, reply){}); 

其中分數和成員是數組。

編輯:

我與收工作和解析SNMP陷阱。基本上我收到一個陷阱並檢查它的警報類型。這些陷阱中的有用信息是警報類型和完整陷阱名稱。我檢查,看看是否報警是0,1或2

如果它是1,那麼我存儲在我目前的排序集合在UNIX時間我收到了。如果它是0或2,我知道該類型的警報已完成,並且需要從Current集合中刪除所有類似它的陷阱,並將它們與我剛剛收到的陷阱一起放入歷史記錄集中。

爲了從當前刪除陷阱把它們放到歷史我不得不爲了跟蹤他們將設在當前設置,爲每個單獨的陷阱一組獨立的。

這就是說,如果我在1346276537時間收到陷阱「RGB色域錯誤(---- Bb)」並將其存儲在當前,我也將確切的分數和成員存儲在一個單獨的集中,其中鍵爲「IPAddress:RGB色域錯誤「。

通過這種方式,當我收到名稱爲「RGB色域錯誤」的報警類型0或2時,我可以將IP地址附加到它的前面,在該集上執行zrange,然後添加到歷史記錄並從當前。最後刪除「IP地址:RGB色域錯誤」設置,以便我可以重新開始。

旁註:我的會員其實已經添加到末端,以使各部件獨特的,而不是相互覆蓋兩個數字。這真的只有目的。

例:IPAdress :: RGB色域誤差(RR - BB):5:46

回答

1

我是在假設回答是以陣列形式正確?

是的,node_redis會給你一個zrange作爲數組的答覆。

我還有另外一個問題,那就是我可以在使用zadd()時使用數組嗎?一個例子就是這樣。

否在redis 2.4之前,一次只能發送一個參數(所以zadd key score member)。自redis 2。4,zadd(以及許多其他命令)是可變參數,即它們接受任意數量的參數 - 但不能作爲數組。你還是要這樣稱呼它:

client.zadd(key, score1, member1, score2, member2, ..., function(err, reply){}); 

你可以做一些.apply掛羊頭賣狗肉,但你必須到scoresmembers陣列首先壓縮成一個陣列。

更新:

如果你已經有scoresmembers陣列,你可以將它們合併到一個數組是這樣的:

var scores = [1, 2, 3], 
    members = ['a', 'b', 'c']; 

function merge (other) { 
    return function (result, current, index) { 
    result.push(current, other[index]); 
    return result; 
    } 
} 

var merged = scores.reduce(merge(members), []); 

// Now merged = [1, 'a', 2, 'b', 3, 'c']; 

var args = [key].concat(merged).concat(function(err, reply){}); 

client.zadd.apply(client, args); 
+0

謝謝。我結束了在一個有序集合上調用'zrange',解析回覆數組並將成員和分數存儲在單獨的數組中。然後我使用這些數組添加到另一個有序集合。無論如何,我需要一個單獨的數組中的成員從另一個有序集合中刪除那些相同的成員,總共有三個。雖然我擔心解析回覆數組可能會花費太多時間,如果它是一個很大的排序集。有沒有更好的方法來做到這一點? – RoyValentine

+0

很難說如果有更好的方法,除非你更多地告訴我們你究竟想要做什麼。也就是說,你可以用不同的方式建模數據。除此之外,如果你可以滿足候選發佈者的要求,你也許可以用Lua腳本來處理它。 –

+0

我編輯了我的問題,確切地包括了我正在做的事情,也許這將幫助您找到一種不同的方式來模擬我的數據,如果存在更好的方法。此外,我需要在Redis中執行此操作,因此僅限於使用它。 – RoyValentine