2015-06-25 101 views
1

最近我開始使用redis(在rails上使用ruby),我想知道存儲這種數據的最佳方式是什麼。將複雜數據存儲在redis中

data1 = { 
    'name2' : { 
    'age' : xxx, 
    'height' : xxx, 
    }, 
    'name2' : { 
    'age' : xxx, 
    'weight' : xxx, 
    } 
} 

data2 = { 
    'class1' : { 
    'num' : xxx, 
    'location' : xxx, 
    'teacher' : xxx, 
    }, 
    'class2' : { 
    'num' : xxx, 
    'location' : xxx, 
    'teacher' : xxx, 
    } 
} 

我已經使用散列圖(HSET,hmset,hget,hmget)命令嘗試,但他們不似乎與子鍵,如「時代」和「高度」的工作。

回答

5

看來您正試圖在Redis中存儲一些JSON。使用redis-rb寶石,這是非常微不足道的。例如,你可以做到以下幾點:

redis = Redis.new 
redis.set("key", data1) 

然後,當你想獲取這個數據,我會做這樣的事情:

data = JSON.parse(redis.get("key")) 

這將檢索您已經存儲在JSON對象Redis的鍵名爲「key」,然後將其解析爲Ruby哈希。我希望這有幫助!

+2

或者,您可以分解JSON對象並使用Hash命令,因爲OP已經直觀地嘗試過了。這有利於能夠獨立地訪問每個字段以進行讀取和/或寫入,但是如果整體需要,則需要從不同的鍵和字段重新組裝完整的JSON對象。 –

3

在Redis哈希中,不能直接存儲嵌套元素,這就是爲什麼你會得到這些錯誤。
如果您希望能夠直接訪問像data1.name1或data2.class2這樣的項目,那麼使用散列是正確的。並存儲它們,你就可以把裏面的東西data1.name1爲JSON:

HSET data1 name1 {'num' : xxx,'location' : xxx,'teacher' : xxx,} 

,並加載數據這將是:

HGET data1 name1 

但是,如果你不希望加載這些字段直接,你可以加載所有內部data1或data2然後vaughanj答案是你所需要的。