2015-02-08 59 views
2

我Node.js的API运行一些昂贵的“组”对MongoDB的使用,例如查询:添加缓存到node.js MongoDB API?

app.get('/group/:collection', function(req, res) { 
    [...] 
    db.collection("indicators").group(keys, conds, { value : 0 } [...] 

什么是一些比较容易实现在此缓存解决方案?

+1

你是什么意思的“解决方案”呢?你在找一些现成的图书馆吗?在这种情况下,这是**脱离主题**,因为你正在寻找图书馆的建议。如果你正在寻找*方法来实现缓存自己*,这是一个相当广泛的问题**,这个问题的答案很简单:“将结果存储在某种对象中,并解决通常在其他地方描述的缓存挑战互联网和太复杂,在这里详细讨论。“ – mnemosyn 2015-02-08 23:30:13

+0

我建议你使用LRU缓存,已经有一个很好用的节点模块,你可能想看看这里: https://github.com/isaacs/node-lru-cache – 2015-02-10 10:08:10

+0

您需要的解决方案取决于您的实施。如果您的应用程序目前正在运行,并且将在可预见的未来运行,那么在单台计算机(有时称为dyno)上运行,那么内存缓存对您来说可以。内存缓存很容易设置。您可以使用节点缓存,lru缓存或npmjs.com上可用的其他任何其他缓存。但是,如果您的应用程序从多个dynos运行,那么您需要分布式缓存,所有dynos都可以共享,例如redis。如果你想要两种缓存类型的组合,你可以看看npmjs.com上的分层解决方案,例如cache-service(免责声明:我写了cache-service)。 – jpodwys 2015-06-03 18:45:25

回答

1

Redis的是非常容易实现的

  1. Install redis

  2. 安装Redis的节点模块

    npm install redis --save 
    
  3. 创建一个缓存服务。这是最难的部分,但总体流程看起来像这样:

    1. 请求缓存服务。
    2. 缓存服务根据查询检查缓存对象的redis。
    3. 缓存从redis返回数据(如果存在的话)或者如果它不存在,则从mongo返回数据。
    4. 如果数据在redis中尚未存在或已过期,则缓存服务会将数据写入redis。

做出奇的好,在高速缓存的顶部,Redis的提供了处理队列,发布/订阅消息,列表管理一些惊人的功能...