簡體   English   中英

節點dbase結構中的Redis

[英]Redis in node dbase structure

我需要存儲一些值。 首先是發布數據,例如:{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)
 })

在redis數據庫中組織數據的方式總有多種,您必須根據想要檢索數據的方式來決定使用哪種方式。

因此,如果要閱讀給定名稱的所有帖子,則可以為每個名稱保留單獨的哈希。 密鑰名稱可能類似於

user:posts:<username>

前綴“ name:posts:”是為了確保不會與數據庫中的其他鍵沖突。 哈希鍵是post 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獲得結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM