我打算在我的Node.js应用程序中使用缓存,以避免数据库读取操作。它只是一些少量的数据(而不是每次都从数据库中读取相同的数据)。我打算在每台服务器上都有一个本地缓存。 我应该选择节点缓存(https://www.npmjs.com/package/node-cache)还是Redis?
哪个会更快更有效?
答案 0 :(得分:5)
如果您计划将来扩展应用程序,请选择 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,
}
}
然后你只需使用所需的提供程序,然后就可以轻松地重构代码,无需更改应用程序中的所有文件。
答案 1 :(得分:1)
这取决于您要缓存的对象大小,您可以单独使用redis,也可以单独使用本地缓存,或两者兼而有之。 Redis将为您提供许多优势,例如集中式缓存,因此具有更高的缓存命中率(因为一个Web服务器设置缓存,所有其他Web服务器都可以使用该值),而在节点缓存中,缓存设置为每台服务器,因此具有较低的缓存命中率。 本地缓存的性能优势是避免网络调用,如果您的对象不是很大,这是一个微不足道的开销,如果您在Web上本地托管它,redis会在两种情况下都能提供良好的性能服务器或专用的单独服务器。 如果您的对象很大,比如几MB,那么不建议使用网络跃点,您应该从数据库或redis缓存中获取对象并在本地缓存它。
答案 2 :(得分:0)
如果您想构建一个成熟的缓存系统,Redis很棒。例如,您希望将会话保留在缓存中,并希望将来扩展。 但是在某些情况下,即使将来要扩展应用程序,节点缓存也将更加有用。 例如,如果您拥有保存在数据库中的非常静态的信息,而您只是不希望服务器始终进行网络调用。节点缓存要快得多,您可以使用ttl将信息上传到节点缓存或任何其他内部缓存,这样可以更快地获取信息。