Node.js 如何缓存执行然后退出的节点代码

Node.js 如何缓存执行然后退出的节点代码,node.js,database,caching,Node.js,Database,Caching,在节点中,通常我使用内存缓存或数据库或使用Lodash memoize在服务器上进行缓存。这很容易,因为该过程从不存在 但是,当运行某个执行然后退出的节点代码时,如何缓存值,以便当同一代码执行得更晚时,它能够记住以前检索到的值,而不必再次从文件中检索这些值,这需要大约2秒的时间,而且速度太慢 计划大纲如下: 我读取一些文件并提取600万个数字//需要在此处进行缓存 2以数组形式返回这些数字 3个进程出口 我知道我可以使用一个数据库,但我不确定我是否想要为这么简单的代码设置一个数据库的复杂性 我可

在节点中,通常我使用内存缓存或数据库或使用Lodash memoize在服务器上进行缓存。这很容易,因为该过程从不存在

但是,当运行某个执行然后退出的节点代码时,如何缓存值,以便当同一代码执行得更晚时,它能够记住以前检索到的值,而不必再次从文件中检索这些值,这需要大约2秒的时间,而且速度太慢

计划大纲如下:

我读取一些文件并提取600万个数字//需要在此处进行缓存

2以数组形式返回这些数字

3个进程出口

我知道我可以使用一个数据库,但我不确定我是否想要为这么简单的代码设置一个数据库的复杂性

我可以使用文件缓存,但我不确定将600万个值写入文件,然后在以后每次读取它们是否会提高性能

我不认为我可以使用内存缓存,因为当进程退出时内存会被擦除?对吧?


有什么想法吗?谢谢

您可以让节点进程保持运行,然后将所有内容都缓存在内存中。然后使用express RESTful或socket上的socket.io,您可以将记录转发给使用者

适用于npm包

DanPlugin.js

let data;
module.exports = function expensiveGetData() {
   if(data) return data;
   // do expensive read
   data = ...the result;
}
danpluginsumer.js

const DanPlugin = require('DanPlugin');
data = DanPlugin();


.... some time later
data2 = DanPlugin(); // fast

数据库怎么样?Redis?我认为你需要重新表述这个问题,即如何避免在每次加载时读取600万条记录Redis很容易设置吗?@danday74类似Redis或Memcached的东西是在你的环境中运行的方式。在本地,您可以将docker和节点模块与复制/粘贴示例一起使用。。所以,是的,这应该很容易。生产-使用DB服务我打赌也有redis-为了方便。我知道它会工作,但我想要的却太多了,+1用于尝试:@danday74节点进程的使用者是什么?该函数将在npm包中公开,任何安装了npm包的人都可以使用/调用它。为什么不将其存储在变量中呢。如果在同一个应用程序中多次需要该文件,我相信它应该保持其变量的状态,请参见上文,请参见您所说的,这将使其旋转-尽管我倾向于使用db以避免最初的缓慢调用-非常感谢