PHP全局变量跨请求持久化

PHP全局变量跨请求持久化,php,performance,global-variables,Php,Performance,Global Variables,我需要一个全局变量在请求之间保持不变 我知道一个类似的问题,但我关心的是什么解决方案性能更好,因为变量是global必须为每个请求设置它。 到目前为止,我能想到的解决办法是 1。将值存储到数据库。 但是每一个请求都会对数据库产生更多的影响 2。将值存储到文件中 但是每个请求都会命中文件系统。 在*nix系统上,磁盘访问被缓存,因此进一步的读取应该来自RAM,因此不会命中驱动器 3。将值存储到php包含文件中,并将该文件包含在web应用程序的主入口点。 文件而不是变量的原始值将包含define 定

我需要一个全局变量在请求之间保持不变

我知道一个类似的问题,但我关心的是什么解决方案性能更好,因为变量是
global
必须为每个请求设置它。

到目前为止,我能想到的解决办法是

1。将值存储到数据库。

但是每一个请求都会对数据库产生更多的影响

2。将值存储到文件中

但是每个请求都会命中文件系统。 在*nix系统上,磁盘访问被缓存,因此进一步的读取应该来自RAM,因此不会命中驱动器

3。将值存储到php包含文件中,并将该文件包含在web应用程序的主入口点。

文件而不是变量的原始值将包含
define

定义(“全球”、“ABC”)

与(2)的关注点相同,由于php缓存处于活动状态,在缓存刷新之前,可能不会实际更新该值

4。使用类似nosql的redis

我不喜欢仅仅为此而建立redis。另外,该变量必须在web应用程序重新启动或系统重新启动期间保持不变。 而实现这一点需要额外的工作


我认为最好的解决办法是(2)。但也许我错了


任何由有效论据支持的指示或建议都是非常受欢迎的。

我宁愿使用3

  • 包含一个php文件比读取一个文本文件(两者都是btw)更“优雅”

  • php文件将由*nix文件系统和php操作码缓存进行缓存

  • 操作码缓存不会有问题,因为当您通过管理后端编辑文件时,文件将有一个新的日期。。。因此,操作码将再次“编译”


如果您仍然担心,可以使用特定的函数使缓存中的单个文件无效。如果使用PHP内置的opcache,在更改文件中的值之前,可以使用
opcache_invalidate
()
opcache\u invalidate
需要PHP>=5.5.0顺便说一句。

$\u会话是由某个持久存储支持的每个会话的“全局”。。但不是全球性的。(但老实说,在你做到这一点之前,你不会有性能问题……你不会。)这个变量的性质是什么。。。它是用来干什么的?它是通过浏览器中运行的管理界面更改的,还是更像一个配置值?它听起来像“配置”,我想说2是一种方法。@prodigitalson它是一个配置值,现在它只是用一个
define
(所以它是一个常量)设置的。但我想通过管理界面使其可编辑。现在,当我想要更改它时,我需要编辑代码。更具体地说,该变量称为
READ_ONLY
,通常为
false
,表示web应用程序接受数据库和文件系统上的更新/插入。在维护期间或其他一些罕见的情况下,我需要将其临时设置为
true
,并在完成后切换回
false
。然后,我会进行文件设置。也就是说,我一般不喜欢自由浮动常数,尤其是对于这样的东西。我更喜欢一个类实例,它保存注入到需要的东西中的配置值。虽然这样做听起来似乎超出了您现在在项目中的位置:-)那么在这种情况下,我倾向于在文件和数据库之间进行配置。通常,存储在文件中的唯一配置是真正的静态值,需要初始化DB句柄,然后在配置表中初始化其余的。实际上,你不是在看“数据库的又一次成功”,就是在建立另一个像Redis这样的持久性存储。使用文件仍然是一种选择,但对于想要动态的东西来说,这是迄今为止最没有吸引力的。我喜欢通过使缓存无效来解决#3问题的建议。包括一个php文件是优雅的,在更新时编写一个php文件是不优雅的,所以我不同意第一句话。多谢各位+你们都是优雅的人,伊姆霍。