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を使用して結果を取得するため、より簡単です。