0

いくつかの値を保存する必要があります。最初は、{postid,text,room_name} のような投稿データです。ここで、postid は自動的にインクリメントされます。いくつかの投稿を収集した後、それらをユーザー名に入れる必要があるため、次のようになります。

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

1 に答える 1

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"}' }

これは、postフィールドとroomフィールドに別々にアクセスする必要がないことを前提としていますが、この種のクエリでは、単一のhgetallを使用して結果を取得するため、より簡単です。

于 2013-01-28T15:47:05.690 に答える