如果标题听起来令人困惑,我很抱歉,如果您在此描述后有任何更好的想法,请随时提出建议。
简而言之,我在 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 函数吗?我想知道有多少开销?问题是,我宁愿使用我已经拥有的东西,也不愿安装新东西,但话又说回来,这取决于实施。