Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 用于管理重复信息的Redis-Mongo集成_Node.js_Mongodb_Session_Node Redis - Fatal编程技术网

Node.js 用于管理重复信息的Redis-Mongo集成

Node.js 用于管理重复信息的Redis-Mongo集成,node.js,mongodb,session,node-redis,Node.js,Mongodb,Session,Node Redis,我有一个节点应用程序,最近我将其从具有cookie会话的单核更改为多核(使用集群),并有一个Redis存储来处理会话。Mongo是我的数据存储,我拥有的最常用的对象之一就是我所说的“用户”对象。以下是它的模型(猫鼬): 现在,随着用户的浏览,这个对象的appData.pageState部分会不断被修改,基本上,当用户在我的应用程序中从一个部分转到另一个部分时,这个对象会变成这样: appData: { pageState: { foo: 5,

我有一个节点应用程序,最近我将其从具有cookie会话的单核更改为多核(使用集群),并有一个Redis存储来处理会话。Mongo是我的数据存储,我拥有的最常用的对象之一就是我所说的“用户”对象。以下是它的模型(猫鼬):

现在,随着用户的浏览,这个对象的appData.pageState部分会不断被修改,基本上,当用户在我的应用程序中从一个部分转到另一个部分时,这个对象会变成这样:

appData: 
{ 
    pageState: 
    { 
        foo: 5,
        bar: 41,
        baz: 23
    }, 
    fontSize: '16px' 
}
这些数字代表其各自部分的最后一页。这一点的关键在于,当用户从一个部分跳到另一个部分时,他们访问的最后一个页面就是他们返回时所服务的页面。如果他们从应用程序中注销并返回,我希望将其存储,这样他们就可以离开他们离开的地方

我有一个会话:
req.session.user
,它在登录时与用户模型相同

req.session.regenerate(function(){
    // Store the user object from the database into the session
    req.session.user = user;
    res.redirect('/home');
});
当我从一节导航到另一节,从一页导航到另一页时,我将pageState保存到Mongo中,然后更新会话数据

User.findOne({'_id' : req.session.user._id },function(err, user){
    if( err ){ }
    else if( user ){
        //page state
        if( user.appData.pageState === undefined ){
            user.appData.pageState = {}; // initialize with an empty object
        }
        user.appData.pageState[path] = id;
        user.markModified( 'appData.pageState' ); // let Mongo know we have modified our nested schema

        user.save(function( err ) {
            if( err ){  }
            else{ 
                req.session.user.appData = user.appData; //copies the Mongo data object to the redis session store
                req.session.save();// saves the new session data
            }
        });
}
}))

当我跳入一个新的部分时,我会得到该页面的会话数据

app.get('/:section', function(req, res){
    var section = req.params.section;
    res.render(section, { appData : req.session.user.appData })
});
所以这里有一个问题:有没有一种方法可以利用redis商店的速度,让redis在mongo自动更改时更新它

app.get('/:section', function(req, res){
    var section = req.params.section;
    res.render(section, { appData : req.session.user.appData })
});