2014-01-22 40 views
0

解釋起來相當複雜。REDIS:查看「字段」下的所有內容

我想要的是有一個命令,它將字段中的參數作爲參數並顯示此字段中的所有鍵和值。

我繞過REDIS文檔,發現HGETALL和HMGET,但這兩個命令不符合我的需要。

HGETALL在參數中詢問密鑰並顯示所有字段的值。 此處爲示例:http://redis.io/commands/hgetall

HMGET接受參數key和附加到它的字段並顯示其值。這裏的例子:http://redis.io/commands/hmget

也有HKEYS但那裏或者不給我想要的。

如果沒有非常精確的命令,我想知道我該如何編寫代碼,以便能夠提供接近我想要創建的內容以及是否有可能。

非常感謝您的回答。

+0

你是不是想從許多哈希取某一特定領域? –

+0

是的,我試圖獲取特定字段上的所有數據(鍵和值)。所以從很多哈希。 – Matarela

回答

1

如果我理解得很好,你有幾個哈希,每個哈希都有自己的密鑰。然後你在這些哈希一個字段,例如字段「名稱」。現在你想問一些問題,比如「告訴我存儲名稱屬性的哪些密鑰和值是多少」

如果這是你的情況,在redis中有一些選項可以做到這一點,但它不會是存儲信息的最佳方式。

這樣做的一種可能方式是使用通用模式來存儲字段名稱的所有鍵。例如「record:a」,「record:b」......然後你可以發出一個KEYS命令,如KEYS記錄:並且你可以得到你的哈希的所有密鑰。 (注意SCAN效率更高)

接下來,您需要發出幾個命令,如hget key,name。您可以使用MULTI,以便同時執行所有命令。

通過該過程,您將獲得第一步中的所有鍵和第二步中的所有值。但我不認爲這是最佳的。

如果我知道你的使用情況,也許我可以幫助更多的

+0

'KEYS'命令不應該用於生產 –

+0

是的,這就是我寫的原因(注意SCAN更高效)。當然,只有當你使用redis 2.8或更好的版本。 –

+0

SCAN不是更高效,但它是增量式的:它不會長時間阻塞Redis實例。無論如何,我會排除任何基於掃描鍵的解決方案。如果OP要求快速訪問該字段中的數據,則需要顯式索引。 –

0

我認爲你是理解,但我不是英語,即使我上的網站翻譯(谷歌翻譯)我沒有都明白你的答案。抱歉。

我試着用鑰匙。我有我的哈希上使用我的領域的列表。我有一個想法,它是做bla=KEYS *,做一個blas.each do |bla|和在每個...做,做@ bla = hget(...,'bla')。或者類似的東西。但這不可能,我沒有鑰匙。

Infact我試圖在Ruby on Rails腳手架上用Redis替換sqlite3。它在控制器中將索引顯示在散列中的所有值。

更清楚:

def index 
    @counters = Counter.all 
end 

我想類似的東西替換此代碼:

def index 
    @counters = REDIS.hget 

    end 
+0

沒有人可以幫助我嗎? – Matarela