Redis在节点dbase结构中

时间:2013-01-19 20:46:46

标签: data-structures node-redis

我需要存储一些值。首先是发布数据,如: {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)
 })

1 个答案:

答案 0 :(得分:0)

如何在redis数据库中组织数据总是有多种方法,您必须根据如何检索数据来决定使用哪一种。

因此,如果您想阅读给定名称的所有帖子,那么您可以为每个名称保留单独的哈希值。关键名称可能类似于

user:posts:<username>

前缀“name:posts:”用于确保不会与数据库中的其他键发生冲突。哈希键是post id,值可以是json

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

我已标记了应该用&lt;&gt;)替换为实际值的部分。

从您的示例看来,每个人的帖子都有自己的索引,因此我们需要单独的键来保存每个人的索引,让我们将其命名为“user:postId:&lt; username&gt;”。

这是以这种结构存储数据的代码:

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获得结果。