在Node.js的MongoDB API中添加缓存?

5

我的Node.js API运行一些昂贵的“组”查询,使用例如:

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

这里有一些相对容易实现的缓存解决方案,您可以考虑使用:

1
“解决方案”是什么意思?你是在寻找一些现成的库吗?如果是这种情况,那么这是不相关的话题,因为你正在寻找库推荐。如果您正在寻找实现缓存的方法,则这是一个相当广泛的问题,其平凡的答案是“将结果存储在某种对象中,并解决在互联网其他地方描述的通常的缓存挑战,这些挑战过于复杂,在此不会详细讨论。” - mnemosyn
我建议您使用LRU缓存,已经有一个很好的节点模块,而且也很容易使用,您可能想在这里看一下: https://github.com/isaacs/node-lru-cache - Ma'moon Al-Akash
你想要的解决方案取决于你的实现。如果你的应用程序当前在单个机器上运行(有时称为dyno),并且在可预见的未来仍将如此,那么内存缓存对你来说就足够了。内存缓存易于设置。你可以使用node-cache、lru-cache或npmjs.com上提供的其他几个缓存库。然而,如果你的应用程序从多个dynos上运行,则需要一个所有dynos都可以共享的分布式缓存,例如redis。如果你想要两种缓存类型的组合,你可以查看npmjs.com上的层次化解决方案,例如cache-service(免责声明:我编写了cache-service)。 - jpodwys
1个回答

1
Redis非常容易实现。
  1. Install redis

  2. Install the redis node module

    npm install redis --save
    
  3. Create a caching service. This is really the hardest part, but the general flow looks something like this:

    1. make request to cache service.
    2. cache service checks redis for cached object based on query.
    3. cache returns data from redis if it exists OR from mongo if it doesn't exist.
    4. if data didn't already exist in redis or had expired, cache service writes data to redis.
除了在缓存方面表现出色,Redis还提供了一些处理队列、发布/订阅消息和列表管理等惊人功能...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接