2015-05-08 63 views
0

我想弄清楚我的缓存是如何工作的,因此想要将它实现到我的模型的钩子中。这是我迄今为止所实现的,我可以看到它正在设置并正确获取缓存。从续集钩返回不同结果

hooks: { 
     beforeFind: function(opts,fn) { 
      cache.get(this.getTableName() + ':' + opts.where.id, function(err, result) { 
       if (result) { 
        return fn(null, result); 
       } 

       return fn(null, opts); 
      }); 
     }, 
     afterFind: function(result, options, fn) { 
      cache.set(this.getTableName() + ':' + result.getDataValue('id'), result, function() { 
       return fn(null, result); 
      }); 
     }, 
} 

问题是,在缓存命中后,它仍在执行数据库查询并从数据库返回结果。

有人能告诉我如何从缓存中返回结果,而不是在缓存命中的情况下执行数据库查询?

回答

1

让我们来看看代码findAll(因为它是要求所有发现)。你可以看到,它会返回Promise,它首先执行钩子,然后在块中有你查询。这就是为什么你不能以这种方式实现缓存。在这个issue有一个关于如何sequelize需要实现插件系统(特别是缓存)的热门讨论。

你能知道什么?看看这个lib,其中Cacher对象是通过模型实现的。