我已经在MongoDB中实现了一个方案来存储用户的信息,如下所示:
var userSchema = new mongoose.Schema({
uuid : { type: String, required: true },
username : { type: String, required: true, trim: true, index: {unique: true} },
email : { type: String, index: { unique: true } },
....
access_token : { type: String },
channels : { type: Array, default: [] }
});
userSchema.methods.addChannel = function(channel, callback){
for ( var i=0; i<this.channels.length; i++) {
if ( this.channels[i].key === channel.uuid) {
return callback(new Error('channel already added to user.'));
}
}
this.channels.push( { key: channel.uuid, isOwner: false });
this.save(function(err){
if (err) { return callback(err); }
return callback(null);
});
};
由于MongoDB的访问时间非常慢,我想使用Redis缓存它。在这种方法中,每当用户登录系统时,我将其相应的文档保存到Redis(key:uuid,Value:user document)。 修改用户文档后,首先修改MongoDB,然后更新Redis。
现在,每当我从Rerids读取用户文档时,我只能访问该对象,但所有已定义的方法(例如userSchema.methods.addChannel)都不再有效。我该如何解决这个问题?我应该将我的数据库模型从对象边界替换为功能吗?或者我需要写一种转换器?任何其他解决方案?