2013-01-19 3 views
0

일부 값을 저장해야합니다. 첫 번째는 다음과 같은 게시물 데이터입니다. {postid, text, room_name} 여기서 postid는 자동으로 증가합니다. 내가 이름에 넣어해야 할 몇 가지 게시물을 수집 한 후에는 그래서 나는 것 :노드 데이터베이스 구조의 Redis

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

.

따라서 주어진 이름에 대한 모든 게시물을 읽으려면 이름마다 별도의 해시를 유지해야합니다. "게시물 : 이름"데이터베이스에서 다른 키와 충돌이있을 수 없다는 것을 확인하는 것입니다 키 이름은 무엇인가

user:posts:<username> 

접두사

처럼 될 수있다. 해시 키는 포스트 ID 될 것이다, 그리고 값은
{"text": "<post text>", "room_name": "<name of room>"} 

를 JSON 수 있습니다 내가 해야하는 부분이 <과 실제 값으로 대체하기 위해 표시 한>).

예를 들어 각 사람의 게시물에는 자체 색인이 있으므로 각 사람의 색인을 보유하려면 별도의 키가 필요합니다. 이름을 "user : postId : <username>"으로 지정하십시오.

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

이 인쇄됩니다 :

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

이 있다고 가정

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 
    ); 
}); 

가 레디 스에서 데이터를 읽으려면 :

은 구조에 데이터를 저장하는 코드입니다 게시물과 방을 별도로 필드에 액세스 할 필요는 없습니다. 그러나 이러한 종류의 쿼리를 사용하면 얻을 수 있기 때문에 더 쉽습니다. 단일 hgetall을 사용하여 결과.