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