使用Redis缓存MongoDB

时间:2014-06-02 14:38:07

标签: node.js mongodb caching redis

我已经在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)都不再有效。我该如何解决这个问题?我应该将我的数据库模型从对象边界替换为功能吗?或者我需要写一种转换器?任何其他解决方案?

0 个答案:

没有答案