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

Javascript 在node.js中缓存数据最便宜的方法?,javascript,node.js,caching,Javascript,Node.js,Caching,我正在实现一个运行匹配算法的node.js服务器。因为我想让服务器尽快响应,所以我希望能够从缓存中检索数据,而不是每次都查询数据库。例如,我需要保存10000-50000个用户的信息。我担心这会占用很多内存。有没有办法在缓存中存储这么多的数据而不冒内存不足的风险?你可以使用memcached或redis,他们自己关心内存及其缺乏,从我读到的关于你试图做什么的内容中删除了过时的数据,这似乎是自相矛盾的。至于我的看法,使用缓存有以下目标: 将预处理的数据保存在内存中,这样就不必执行逻辑来再次生成它们

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

你可以使用memcached或redis,他们自己关心内存及其缺乏,从我读到的关于你试图做什么的内容中删除了过时的数据,这似乎是自相矛盾的。至于我的看法,使用缓存有以下目标:

  • 将预处理的数据保存在内存中,这样就不必执行逻辑来再次生成它们
  • 将数据保存在一个存储中,当我们想要获取数据时,这个存储速度要快得多
  • 现在,根据我从你的问题中了解到的情况,你的目标似乎是#2。如果是这样,那么您别无选择,只能根据要在内存中保留多少数据来调整大小。然后,应该使用该大小来拥有足够的RAM来保存结果,而不是返回到数据库

    像ehCache这样的缓存框架还提供了从磁盘交换数据的选项。从ehCache()检查此链接;这将帮助您设计缓存的设置方式,即退出策略,以保持大小可控,以及何时(以及如何)准备将数据假脱机到底层磁盘存储。假脱机到磁盘意味着您需要HDD。但是,您需要进行一些基准测试,以确定DB是否比底层缓存存储更快

    您可以选择使用JVM缓存,如ehCachs、JCS,甚至可以选择更复杂的框架,如memcache、redis,它们将为您实现所有这些

    干杯
    kapil

    节点memchache比redis更快,更易于实现。你可以看到

    使用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}`);
      }
    });
    

    我的目标是你所说的第二个目标。但为什么看起来矛盾呢?感谢您的帮助。我说这似乎是矛盾的,因为您似乎将数据保留在缓存中,这是一种比DB更好的性能替代方法,但您也担心RAM被耗尽,从而导致应用程序出现问题。因此产生了矛盾——“希望采用更快的方法,即基于RAM的数据,但不想耗尽RAM”。即使你去使用memcache或redis,你仍然需要RAM或选择磁盘交换,但如果你真的想要速度,请调整数据大小,并拥有足够的RAM来满足需要。你是对的。我的意思是,我正在努力理解什么是最好的折衷方案。在这种情况下,ok是有意义的——你应该将LRU作为一种策略来考虑你想要做什么。像redis这样的组件可能会对您想要做的事情造成过度的杀伤力。所以我可以在执行开始时将我经常使用的数据加载到redis中?是否有一个规模超过这个规模,使用Redis就没有意义了?Redis是一个独立于您的程序工作的独立服务。它能够存储指定时间的数据。如果数据量很大,可以在不同的计算机之间分配负载