2013-01-19 32 views
0

我需要存儲一些值。首先是發佈數據,如: {postid,text,room_name},其中postid將自動遞增。 和收集一些帖子,我需要把它們放進名後,所以我將有:Redis在節點dbase結構中

Thomas 
    1,text,room_name 
    2,text,room_name 
    3,text,room_name 
Kris 
    1,text,room_name 
    2,text,room_name 
    3,text,room_name 

我想我應該用散列,但我不知道如何把它們推到這些用戶名。 我做的是:

db.incr('id',function(id){ 
db.hmset(id,'room',room,'text',text,redis.print) 
}) 

回答

0

總是有多種方式如何redis的數據庫組織數據,你必須決定使用基於你想如何檢索數據的目標之一。

所以,如果你想讀取給定名稱的所有帖子,比你可以爲每個名稱保留單獨的散列。關鍵名稱可能類似於

user:posts:<username> 

前綴「name:posts:」是爲了確保不會與數據庫中的其他鍵發生衝突。散列鍵將帖子ID,和值可JSON

{"text": "<post text>", "room_name": "<name of room>"} 

我已經標記這應該零配件需要更換與實際值與<>)。

從你的例子看來,每個人的帖子都有自己的索引,所以我們需要單獨的鍵來保存每個人的索引,讓我們把它命名爲「user:postId:<username>」。

這是將數據存儲在這樣的結構中的代碼:

var redis = require('redis'), db = redis.createClient(), 
    username = 'Thomas', post = 'Hello World!', room = 'stackoverflow'; 

db.incr('user:postId:' + username, function (error, id) { 
    if (error) throw error; 
    db.hset(
     'user:posts:' + username, id, 
     JSON.stringify({post: post, room: room}), 
     redis.print 
    ); 
}); 

要從redis的讀取數據:

db.hgetall('user:posts:' + username, function (error, replies) { 
    console.log(replies); 
}); 

這將打印:

{ '1': '{"post":"Hello World!","room":"stackoverflow"}' } 

這假定你不需要單獨訪問郵局和房間 - 但是對於這種查詢,這很容易,因爲你得到了你的結果使用單個hgetall。