【问题标题】:Redis in node dbase structure节点数据库结构中的Redis
【发布时间】:2013-01-19 20:46:46
【问题描述】:

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

【问题讨论】:

    标签: data-structures node-redis


    【解决方案1】:

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

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

    user:posts:<username>
    

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

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

    我用 ) 标记了应该用实际值替换的部分。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2022-01-24
      • 2013-06-28
      相关资源
      最近更新 更多