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