0

是否可以让 PHP 服务器(通过 php5-fpm)在 PHP 脚本启动后,客户端访问它之前运行一个 PHP 脚本,以执行APC变量的初始化。

基本上,一些事件在服务器生命周期内通过 计算apc_inc,例如

apc_inc('event-xyz-happened');

event-xyz-happened APC var 是永久的(寿命是服务器寿命,而不是请求寿命)。

问题是,event-xyz-happened APC var 必须在第一次递增(与 Perl 不同)之前存在。apc_inc速度很快,我想避免像这样的解决方案

if ( ! apc_exists('event-xyz-happened')) {
  apc_store('event-xyz-happened', 1);
}
else {
  apc_inc('event-xyz-happened');
}

这不仅需要调用apc_exists('event-xyz-happened'),而且当它还不存在时也可能会受到竞争条件的影响。

--

在客户端访问服务器之前,是否有创建一些 APC 变量的解决方案?

4

2 回答 2

2

您可以使用 apc_add 后跟 apc_inc (请参阅http://www.php.net/manual/en/function.apc-add.php

// if it doesn't exist, it gets created
// if it does exist, nothing happens, no race condition
apc_add('event-xyz-happened', 0); 
apc_inc('event-xyz-happened', 1); 
于 2013-02-13T09:54:28.523 回答
0

您不应为此目的使用 apc 变量。

APC 是一个缓存引擎,它不是一个快速的数据库引擎。作为缓存引擎,它可以而且迟早会删除您的变量以清除其他变量或操作码缓存的一些内存。您分配给 APC 的内存越多,您的变量被删除的可能性就越小,但您不能相信该变量会在那里。

您所有的 php 脚本都必须检查变量是否在 apc 缓存中,如果不在,则对其进行初始化。

如果您需要存储一些快速访问的变量,您可以设置一个本地 mysql 服务器并使用“内存”引擎创建一个表。它几乎和 apc 一样快,但只要服务器正在运行,我就会保持不变。

祝你好运

于 2013-02-13T09:49:19.087 回答