2017-07-14 44 views
2

我正在使用node_redis客戶端用於node.js.我有一個結構化的數據,目前我正試圖用redis存儲。每當我嘗試將更多的鍵值添加到同一組時,它就會覆蓋。我正在追逐它幾天,我發現我必須添加獨特的成員,然後我可以根據他們添加數據。我通過在用戶級別定義唯一鍵來完成該部分,但我希望通過公司和用戶名組合來創建哈希鍵,以便它在雲中運行時始終是唯一的。在我jsonMessage在NodeJS中使用redis創建唯一的哈希鍵

{ 
    "Company": "ABC", 
    "Users": [ 
    { 
     "Username": "[email protected]", 
     "Authenticated": false 
    }, 
    { 
     "Username": "[email protected]", 
     "Authenticated": true 
    }, 
    { 
     "Username": "[email protected]", 
     "Authenticated": true 
    } 
    ] 
} 

數據我試了一下,到目前爲止:

var message = JSON.parse(jsonMessage); 

message.Users.forEach(function(user,i){ 

    redisClient.sadd("users", "user:" + i); 

    redisClient.hmset("user:" + i, "Username", user.Username, "Authenticated", user.Authenticated); 

}); 

我怎麼把我的數據,根據該公司。在哪裏我應該把我的公司,然後分別添加其用戶,因爲我有由多家公司組成的數據。

什麼應該是公司與其用戶在redis中的確切綁定。

回答

2

這一切都取決於你想如何訪問數據,但例如,你可以嘗試做這樣的:

爲了配合當前的結構,你可以使用這樣的事情:

set "company:ABC:users:0:username" "[email protected]" 
set "company:ABC:users:0:authenticated" 0 
set "company:ABC:users:1:username" "[email protected]" 
set "company:ABC:users:1:authenticated" 1 

隨着越來越多的最小的方法:

set "ABC:[email protected]" 0 
set "ABC:[email protected]" 1 

隨着潛在更多的數據存儲以後:

hset "ABC:[email protected]" "authenticated" 0 
hset "ABC:[email protected]" "authenticated" 1 

所有這些方法都意味着有不同的訪問數據的方式,當然這表明您可以通過多種方式來構建數據。進入這個網站,你可以在網上嘗試所有這些命令:

你要記住什麼是你不能有深嵌套結構Redis的。你可以有散列,但它們是單層的,嵌套的多層通常使用複雜的鍵,如「a:b:c」或「abc」來模擬 - 當你的原始數據是JSON時,你必須牢記這一點可以任意嵌套自然。