Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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
Php OpCache-了解缓存是如何工作的,是每个用户还是每个资源?_Php_Caching_Opcache - Fatal编程技术网

Php OpCache-了解缓存是如何工作的,是每个用户还是每个资源?

Php OpCache-了解缓存是如何工作的,是每个用户还是每个资源?,php,caching,opcache,Php,Caching,Opcache,我正在使用OpCache,因为它是PHP5.5.x附带的,我对它非常满意,但我想调整它的内存设置,这就是我理解的不足之处 当一个给定的用户请求一个给定的页面时,服务器响应这个请求,调用PHP解释器,解释器将操作码存储在缓存中,为内容提供服务,仅此而已。下一次请求进来时,如果请求的操作码相同,缓存就会启动,但我的问题是 缓存是基于每个用户工作的(缓存的操作码仅适用于此特定用户的请求),还是它们适用于使用这些缓存的操作码的任何请求 我想做的是调整OpCache以使用一定数量的内存,但我不知道内存池是

我正在使用OpCache,因为它是PHP5.5.x附带的,我对它非常满意,但我想调整它的内存设置,这就是我理解的不足之处

当一个给定的用户请求一个给定的页面时,服务器响应这个请求,调用PHP解释器,解释器将操作码存储在缓存中,为内容提供服务,仅此而已。下一次请求进来时,如果请求的操作码相同,缓存就会启动,但我的问题是

缓存是基于每个用户工作的(缓存的操作码仅适用于此特定用户的请求),还是它们适用于使用这些缓存的操作码的任何请求

我想做的是调整OpCache以使用一定数量的内存,但我不知道内存池是基于每个用户工作的,还是像共享资源池一样工作的


你能给我一个提示吗?

关于操作码如何存储在缓存中以及如何从共享内存读取,你已经说对了。但是,它不是基于用户,而是基于脚本级别。每个已解析为操作码的编译为操作码的php文件都将保存到共享内存中并从那里执行。对于缓存的每个脚本,解析编译步骤(否则会很慢)将被短路

要回答您的问题,不,缓存不是基于每个用户,而是基于每个脚本。缓存的操作码仍然由脚本引擎(主要是Zend)根据每个请求执行

是的,它确实从共享内存中读取

参考文献

太棒了!就像我希望它表现的那样。现在我可以轻松地调整内存设置。非常感谢:)@Awemo我对共享内存感到困惑。你能告诉我什么是共享内存吗。硬盘还是RAM?@sandipshirsale它是服务器系统的RAM,请参见此。