最便宜的方法来缓存node.js中的数据?

时间:2014-07-28 04:48:40

标签: javascript node.js caching

我正在实现运行匹配算法的node.js服务器。由于我希望尽快让服务器响应,我希望能够从缓存中检索数据,而不是每次都查询数据库。例如,我需要保留10000-50000个用户的信息。我担心这会占用大量内存。有没有办法将这么多数据存储在缓存中而没有RAM耗尽的风险?

4 个答案:

答案 0 :(得分:4)

从我读到的以及你想要做的事情来看,你似乎在与自己发生矛盾。根据我的看法,使用缓存有以下目标:

  1. 将预处理数据保留在内存中,这样您就不必执行逻辑来再次生成它们
  2. 将数据保存在商店中,当我们想要获取数据时,这会快得多。
  3. 现在,基于我从你的问题中读到的内容,如果#2,那么你的目标似乎就是这样。如果是这样,那么你没有选择,只能确定你想要在内存中保留多少数据的大小。然后应该使用该大小来获得足够的RAM来保存结果,而不是回到数据库。

    像ehCache这样的缓存框架还提供了从磁盘交换数据的选项。从ehCache(http://www.ehcache.org/documentation/user-guide/storage-options#memory-use-spooling-and-expiry-strategy)查看此链接;这应该可以帮助您设计缓存应该如何设置,也就是驱逐策略以保持大小可控,以及何时(以及如何)准备将数据假脱机到底层磁盘存储。假脱机到磁盘意味着你需要有硬盘。但是,如果DB比底层缓存存储更快,你需要一些基准测试。

    你可以选择像ehCachs,JCS这样的JVM缓存,甚至可以选择更复杂的框架,比如memcache,redis,它可以为你完成所有这些OOTB。

    欢呼声 卡皮尔

答案 1 :(得分:3)

你可以使用memcached或redis,他们自己关心内存并且缺乏删除过时的数据

答案 2 :(得分:1)

node-memchache比redis更快,更容易实现。你可以看到 https://github.com/ptarjan/node-cache

答案 3 :(得分:1)

使用mcache,可以很容易地从Node.js中的数据库查询缓存数据。

以下是从MySQL缓存查询的示例:

const Mcache = require('mcache');

const garbageCollectionInSeconds = 10;
const timeToLiveInSeconds = 60;

// This function will be called to update the cache
const update = function (id, callback) {
  mysql.query('SELECT ... WHERE id=?', id, callback);
};

const cache = new Mcache(timeToLiveInSeconds, garbageCollectionInSeconds, update);

const id = 'some-entity-id';
cache.get(id, function (error, data) {
  if (error) {
    console.error(error.message);
  } else {
    console.log(`Result: ${data}`);
  }
});