PHP APC,给我普及一下

13
我目前正在将memcached引入我的服务中,但是一直有人建议我也要实现APC来缓存实际的代码。
我已经查看了一些教程,还有PHP文档,但是我的主要问题是,如何在大规模上实现它?PHP文档中提到了存储变量,但并没有详细说明。
请原谅我在这个领域的无知,我想知道在真实的网站中这是如何实现的。我是要缓存所有东西还是只缓存经常使用的部分,比如函数?
谢谢!
3个回答

9

APC既是一个opcode缓存,也是一个通用数据缓存。后者的工作方式类似于memcached,而opcode缓存通过缓存已解析的php文件来工作,以便它们不必在每个请求中重新解析。这通常可以大大加快执行时间。


啊,听起来Opcode缓存将是我服务中最有用的部分。您是否有关于在Opcode缓存情况下实现APC的更多信息? - James
嗯...基本上你只需安装扩展并在php.ini文件中设置一些配置即可。如果你从pecl下载扩展的源代码,其中附带有一个小型Web应用程序,你可以用它来查看一些统计信息。否则,手册相当详尽。 - troelskn
这实际上只是设置它将使用多少空间,并将其放入服务器的问题。对于大多数重要的网站来说,想要拥有它是显而易见的。我曾经在一台机器上安装它,当时该机器的负载平均值从1.0+降至<0.3,因为每次页面加载都进行了大量冗余编译。 - Alister Bulman

9
正如您所知,PHP是一种解释性语言,因此每次请求到达服务器时,需要打开所有必需和包含的文件,解析它们并执行它们。APC提供的是跳过require/include和解析步骤(文件仍然必须被require,但存储在内存中,因此访问速度要快得多),因此脚本只需被执行。在我们的网站上,我们使用APC和memcached的组合。APC可以加速上述步骤,而memcached可以实现快速分布式存储和访问全局变量(预计算的昂贵函数调用等,可以由多个客户端共享一定时间)以及会话变量。这使我们能够拥有多个前端服务器,而不会失去任何客户端状态,例如登录状态等。
至于应该缓存什么... 嗯,这实际上取决于您的应用程序。如果您将来需要多个前端,则建议使用memcached进行此类缓存和存储,并使用APC作为opcode缓存。

是的,这听起来像是我自己最有可能使用的系统类型。您是否设置了APC缓存中文件存储的时间?APC缓存的理想大小是多少(10mb、500mb等)?如果对实际PHP文件进行更改,它是否会重新缓存或仅在缓存过期的时间段之后才会重新缓存? - James
默认情况下,APC会检查每个请求所需文件的修改时间。因此,如果您进行新部署,APC将自动解析和缓存最新的文件。这里要查看的apc变量是apc.stat。如果您关闭它,您需要重新启动Web服务器才能使用新代码。然而,这将使APC更快,因为它不需要检查文件系统。内存...我不太确定。同样,这取决于您的系统。如果您仅用它来进行OpCode缓存,则不需要太多内存。 - PatrikAkerstrand
它所需的空间取决于代码的大小。对于一个适当的尺寸,我会从64MB开始。我通常也会留出足够的余地,即代码实际占用空间的2.5-3倍,这样我就可以放置另一个版本。对于繁忙的网站,apc.stat = 0很有用,但您也可以通过函数调用清除缓存,而无需重新启动Apache。 - Alister Bulman

2

您不需要实现APC的opcode缓存功能,只需将其作为php模块启用即可。

有关APC缓存大小和其他配置信息,请参见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接