Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js全局数组与redis_Javascript_Arrays_Node.js_Redis - Fatal编程技术网

Javascript node.js全局数组与redis

Javascript node.js全局数组与redis,javascript,arrays,node.js,redis,Javascript,Arrays,Node.js,Redis,我正在构建一个node.js应用程序,并且有一组属性,我需要在每个操作中查找这些属性(它们与权限关联)。我使用mysql数据库作为持久存储。我最初打算使用redis来存储这些属性,因为它们不会有太大的变化,因此可以在应用程序启动时从mysql数据库加载,如果它们发生变化,则可以进行刷新。关键是我需要尽可能快的查找,因为它经常发生,但是数据不需要持久化,所以需要redis而不是mysql 当我今天思考这个问题时,我突然想到我可以使用一个全局关联数组来存储这些数据。我总是用同一个键查找,总是得到完整

我正在构建一个node.js应用程序,并且有一组属性,我需要在每个操作中查找这些属性(它们与权限关联)。我使用mysql数据库作为持久存储。我最初打算使用redis来存储这些属性,因为它们不会有太大的变化,因此可以在应用程序启动时从mysql数据库加载,如果它们发生变化,则可以进行刷新。关键是我需要尽可能快的查找,因为它经常发生,但是数据不需要持久化,所以需要redis而不是mysql

当我今天思考这个问题时,我突然想到我可以使用一个全局关联数组来存储这些数据。我总是用同一个键查找,总是得到完整的属性列表。我认为,当我在服务器上启动应用程序时,它可以将数据加载到连接到节点中“全局”对象的数组中,而不是将其粘贴到redis中,这样可以降低应用程序堆栈的复杂性。另外,我假设javascript数组的查找速度也会更快,因为它的开销更小


我错过什么了吗?redis或节点中的全局对象的工作方式是否会使前者更快?我预计最有可能的情况是100把钥匙,但也有可能是10000把钥匙。不过,这在总体方案中似乎还不算太大。

在全局对象中存储数据肯定会更快,因为没有网络开销、解析开销等。唯一的问题(在您的场景中)是,由于在每个进程中都有一个副本,所以需要更多内存。如果这不是问题,那就去做。

这真的需要更多的内存吗?节点不是单线程的吗,因此实际上只有全局数组的一个副本?根据我对回调工作方式的理解,函数的“状态”本质上是被保存的,这样当回调函数被触发时,该函数的所有局部变量都会被重新加载。但是全局变量在局部范围之外,因此不要“冻结”。这意味着所有回调只共享一个副本。听起来正确吗?是的,但这是假设您只有一个NodeJS进程。我不确定您正在编写什么样的应用程序,但我假设它是一个http服务器。如果这是正确的,那么通常您希望运行一个以上的后端进程,以便可以利用多个核心/机器。在使用Redis时,每个进程中都会有一个副本,您只能将其保存在一个位置。