Node.js 节点缓存与Redis的简单缓存

Node.js 节点缓存与Redis的简单缓存,node.js,caching,redis,Node.js,Caching,Redis,我计划在Node.js应用程序中使用缓存,以避免数据库读取操作。它只是少量的数据(而不是每次都从数据库中读取相同的数据)。我计划在每台服务器上都有一个本地缓存。 我应该使用节点缓存()还是Redis 哪一个会更快更高效 如果计划将来扩展应用程序,请选择redis 如果这只是一个小项目,您需要良好的性能,您可以在内存中使用它 作为初学者,我建议使用内存缓存,但使用控制反转机制,以便在使用redis后能够轻松重构这些内容。试着这样做: // cache service module.exports

我计划在Node.js应用程序中使用缓存,以避免数据库读取操作。它只是少量的数据(而不是每次都从数据库中读取相同的数据)。我计划在每台服务器上都有一个本地缓存。 我应该使用节点缓存()还是Redis

哪一个会更快更高效

如果计划将来扩展应用程序,请选择redis

如果这只是一个小项目,您需要良好的性能,您可以在内存中使用它

作为初学者,我建议使用内存缓存,但使用控制反转机制,以便在使用redis后能够轻松重构这些内容。试着这样做:

// cache service

module.exports = (provider) => {
   // provider here is an abstraction of redis or in memory node
   // implement your logic
   
   const save = (key, item) => {
     provider.save(key, item);
     // return promise callback etc
   }    

   const getItem = (key) => {
      provider.get(key);
   } 

   return {
     save,
     getItem,
   }
}

然后,您只需使用所需的提供程序,然后就可以轻松地重构代码,无需更改应用程序中的所有文件。

这取决于要缓存的对象大小,您可以单独使用redis,也可以单独使用本地缓存,或两者的组合。 Redis将为您提供许多优势,如集中式缓存,因此具有更高的缓存命中率(当一个web服务器设置缓存时,所有其他web服务器都可以使用该值),而在节点缓存中,缓存是按服务器设置的,因此具有较低的缓存命中率。 本地缓存的性能优势在于避免了网络调用,如果您的对象不是很大,网络调用的开销很小;如果您将redis本地托管在web服务器或专用的独立服务器上,则redis在这两种情况下都能为您提供良好的性能。
如果您的对象很大,比如说几MB,那么不建议使用网络跃点,您应该从数据库或redis缓存中获取对象,并在本地进行缓存。

如果您想构建一个全面的缓存系统,redis非常棒。例如,您希望将会话保持在缓存中,并希望在将来进行扩展。 但是,在某些情况下,即使在将来必须扩展应用程序的情况下,节点缓存也会更加有用。
例如,如果您有保存在数据库中的非常静态的信息,并且您不希望服务器总是执行网络调用。节点缓存要快得多,您可以使用ttl将信息上载到节点缓存或任何其他内部缓存,这样可以更快地获取信息。

如果不是很多数据,我会使用内存中的某些内容。但这只是我的看法。@robertklep对于一个典型的服务器,您会将什么定义为“大量数据”?我是服务器的新手,我的问题与上面发布的问题相同。@Satya这完全取决于服务器正常运行期间可用的可用RAM。@robertklep服务器在任何给定情况下服务10k聊天会话(socket.io-1 session=1 room=2人)需要多少RAM。对于这个必需的RAM,什么不能算作“大量数据”?@Satya没有什么计算器可以让我给你任何答案。我只需要运行一些测试,看看一个典型的会话会占用多少内存(你问“典型会话”是什么?我不知道:D)。不过,老实说,如果考虑到可伸缩性,集中式解决方案可能会更好。当然是聊天系统。缓存在本地意味着浏览器还是服务器本身?