【发布时间】:2019-05-15 15:53:23
【问题描述】:
我正在构建一个小型社交网络(用户有帖子,帖子有 cmets - 非常基本),使用集群 nodejs 服务器和 redis 作为分布式缓存。
我缓存用户帖子的方法是有一个sorted set,其中包含按速率排序的所有用户帖子ID(每次有人添加喜欢或评论时都应该更新),实际对象排序为hash objects。
所以获取用户的帖子流程应该是这样的:
1. 使用zrange 从sorted set 中获取一系列id。
2. 使用multi/exec 和hgetall 一次性获取所有对象。
我有几个问题:
1。关于性能问题,当缓存大小变大时,我的方法是否会扩展,或者我应该使用 lua 之类的?
1.如果我想继续当前的方法,我应该在redis崩溃的情况下保存排序集,如果我使用redis持久化这会影响整体性能,我考虑为@使用专用的redis服务器987654327@(我搜索了是否可以只备份部分redis数据但没有找到。
我的方法 => getTopObjects({userID}, 0, 20) :
self.zrange = function(setID, start, stop, multi)
{
return execute(this, "zrange", [setID, start, stop], multi);
};
self.getObject = function(key, multi)
{
return execute(this, "hgetall", key, multi);
};
self.getObjects = function(keys)
{
let multi = thisArg.client.multi();
let promiseArray = [];
for (var i = 0, len = keys.length; i < len; i++)
{
promiseArray.push(this.getObject(keys[i], multi));
}
return execute(this, "exec", [], multi).then(function(results)
{
//TODO: do something with the result.
return Promise.all(promiseArray);
});
};
self.getTopObjects = function(setID, start, stop)
{
//TODO: validate the range
let thisArg = this;
return this.zrevrange(setID, start, stop).then(function(keys)
{
return thisArg.getObjects(keys);
});
};
【问题讨论】:
标签: node.js caching redis social-networking