2012-11-06 53 views
1

在Redis的,存儲對象的數組,我們應該使用哈希的對象,並添加其鍵列表:如何從Redis的列表中檢索所有哈希值?

HMSET concept:unique_id name "concept" 
... 
LPUSH concepts concept:unique_id 
... 

我要檢索列表中的所有哈希值(或對象),但列表只包含散列鍵,所以需要兩步命令,對嗎?這是我在Python中的工作方式:

def get_concepts(): 

    list = r.lrange("concepts", 0, -1) 
    pipe = r.pipeline() 

    for key in list: 
     pipe.hgetall(key) 
    pipe.execute() 

是否有必要迭代和獲取每個單獨的項目?它可以更優化嗎?

+1

您還可以將所有對象存儲在列表中(例如,以序列化的形式,例如JSON)。然後一個簡單的LRANGE就可以做到了。 –

+0

謝謝Sergio,我沒有想過,但我寧願有操縱Redis對象屬性的可能性 – ksiomelo

回答

4

可以使用SORT命令來做到這一點:

SORT concepts BY nosort GET concept:*->name GET concept:*->some_key 

*將擴展到列表中的每個項目。

爲分頁添加LIMIT offset count

請注意,您必須枚舉散列中的每個字段(您要提取的每個字段)。

另一種方法是使用新的(在redis 2.6)EVAL命令在redis服務器中執行Lua腳本,該腳本可以執行您的建議,但可以在服務器端執行。

+0

如果對象的屬性之一是列表,該怎麼辦?例如LPUSH概念:1:事物兔子。如何獲得這個列表呢? – ksiomelo

+1

你不能。只有你可以'GET'或'HGET'的東西。查看文檔(上面鏈接 - redis命令通常有非常好的文檔)。 –