0

如果标题听起来令人困惑,我很抱歉,如果您在此描述后有任何更好的想法,请随时提出建议。

简而言之,我在 Linux 上使用带有以下假设文件/代码的 PHP:

工作.php:

if(setting_get('started')!='on'){
  setting_set('started','on');
  echo 'Starting...';
  set_time_limit(0); // ad infinitum (in theory)
  ignore_user_abort(true); // ignore disconnection
  while(setting_get('started')=='on'){
    // do something
    sleep(10);
  }
}else echo 'Already started!';

接口.php:

switch($_REQUEST['action']){
  case 'status':
    echo 'Service is: '.setting_get('on');
    break;
  case 'start':
    header('Location: job.php');
    break;
  case 'stop':
    setting_set('started','off');
    break;
  case 'restart':
    setting_set('started','off');
    header('Location: job.php');
    break;
}
echo '<a href="?action=status">Check Status</a>';
echo '<a href="?action=start">Start</a>';
echo '<a href="?action=stop">Stop</a>';
echo '<a href="?action=restart">Restart</a>';

代码应该是不言自明的。基本上,job.php应该只能无限期地运行一个实例,直到用户明确停止它interface.php,它可以在用户和作业之间进行调解。

我的问题是setting_get-setting_set它们只是假设的函数,可以很容易地用平面文件或数据库替换。问题是它们被调用了很多,这就是为什么它们应该运行得快并且消耗很少的内存(如果可能的话,甚至根本没有)。

想法?

编辑: 应该注意的是,到目前为止我保存的设置也可以是一个简单的布尔标志。

Edit2 关于 Memcached / APC / Redis。我想知道,我不能在 MEMORY 类型的数据库上使用普通的 mysql 函数吗?我想知道有多少开销?问题是,我宁愿使用我已经拥有的东西,也不愿安装新东西,但话又说回来,这取决于实施。

4

2 回答 2

2

APCapc_storeapc_fetch怎么样?

于 2011-03-03T22:56:13.323 回答
0

设置时间限制(0);// 无限(理论上)

你可以在cron没有这样限制的情况下运行你的工作。

使用共享内存(最快)、memcached、redis(按速度排序)。

于 2011-03-03T22:56:54.027 回答