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