Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Firebase函数:支持跨函数的全局变量_Firebase_Caching_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Firebase函数:支持跨函数的全局变量

Firebase函数:支持跨函数的全局变量,firebase,caching,firebase-realtime-database,google-cloud-functions,Firebase,Caching,Firebase Realtime Database,Google Cloud Functions,我想在http firebase函数中缓存最近的记录,比如最近24小时的记录。 在http firebase函数(比如fetchLastXRecords)中,我在缓存定义的全局变量中查找记录,以存储未找到的记录,从数据库中获取并设置缓存 当我想更新缓存的任何记录时会出现问题,因为这个全局变量不能被其他firebase函数访问,可能是实时数据库更改触发器 更新缓存中记录的好方法是什么?我可以调用缓存http firebase函数并传递更新的记录吗?或者我可以将更新后的记录存储在数据库中,然后使用缓

我想在http firebase函数中缓存最近的记录,比如最近24小时的记录。 在http firebase函数(比如fetchLastXRecords)中,我在缓存定义的全局变量中查找记录,以存储未找到的记录,从数据库中获取并设置缓存

当我想更新缓存的任何记录时会出现问题,因为这个全局变量不能被其他firebase函数访问,可能是实时数据库更改触发器


更新缓存中记录的好方法是什么?我可以调用缓存http firebase函数并传递更新的记录吗?或者我可以将更新后的记录存储在数据库中,然后使用缓存函数在数据库中查找并更新缓存记录?

在云函数中,您无法确保代码中有全局变量可供函数访问。关于云功能的工作原理,您需要了解两件事:

在load下,将分配多个服务器实例来运行您的功能。这些服务器实例不共享任何状态。 您的每个功能都部署到不同的服务器实例。两个函数永远不会在同一个服务器实例上运行。
因此,如果要在函数之间共享任何值,则应该使用持久性机制,例如数据库。当函数需要读写共享值时,它们应该访问数据库。此外,他们应该使用某种原子事务来确保多个并发读写是安全的。

在云函数中,您无法确保代码中有一个全局变量可供函数访问。关于云功能的工作原理,您需要了解两件事:

在load下,将分配多个服务器实例来运行您的功能。这些服务器实例不共享任何状态。 您的每个功能都部署到不同的服务器实例。两个函数永远不会在同一个服务器实例上运行。
因此,如果要在函数之间共享任何值,则应该使用持久性机制,例如数据库。当函数需要读写共享值时,它们应该访问数据库。此外,他们应该使用某种原子事务来确保多个并发读写是安全的。

云函数应该是无状态的,因为每个函数都可以在单独的实例上运行。缓存是一种有效的方法,但您需要确保它为每个函数调用自动初始化。我不确定全局变量的问题是什么,所以请检查一下。@FrankvanPuffelen似乎无法在函数之间共享内存中的对象。在函数作用域之外定义的任何全局变量仅用于单个函数的多次调用。云函数确实支持全局变量:云函数应该是无状态的,因为每个函数都可以在单独的实例上运行。缓存是一种有效的方法,但您需要确保它为每个函数调用自动初始化。我不确定全局变量的问题是什么,所以请检查一下。@FrankvanPuffelen似乎无法在函数之间共享内存中的对象。在函数作用域之外定义的任何全局变量仅用于单个函数的多次调用。云函数确实支持全局变量:是的,Doug,不能缓存在内存中。数据库看起来是唯一的选项。云函数确实支持全局变量:@LaszloSchürg该文档的意思是,您必须使用另一个产品在不同服务器实例上运行的函数调用之间共享数据。JavaScript全局变量只能通过在同一实例上运行的函数调用来访问。云功能本身没有跨实例共享的功能。这就是我最后一段所说的——你应该使用一个持久性机制,比如数据库。真的是全局变量的范围/寿命仅是每个函数实例,你需要考虑。文档中确实有一个关于缓存的建议:因此,建议尽可能在全局范围内跨调用缓存状态。如果没有此缓存,您的函数仍应准备工作,因为@LaszloSchürg这里的关键短语是在可能的地方。OP询问的是不共享全局范围的多个函数。在这种情况下,需要一种持久性机制来在调用之间共享数据。数据库看起来是唯一的选项。云函数确实支持全局变量:@LaszloSchürg该文档的意思是,您必须使用另一个产品在不同服务器实例上运行的函数调用之间共享数据。JavaScript全局变量只能通过在同一实例上运行的函数调用来访问。云功能本身没有跨实例共享的功能。这就是我最后一段所说的——你
应该使用持久性机制,如数据库。Trrar是全局变量的范围/寿命仅是每个函数实例,您需要考虑。文档中确实有一个关于缓存的建议:因此,建议尽可能在全局范围内跨调用缓存状态。如果没有此缓存,您的函数仍应准备工作,因为@LaszloSchürg这里的关键短语是在可能的地方。OP询问的是不共享全局范围的多个函数。在这种情况下,需要一种持久性机制来在调用之间共享数据。