Linux 高速(/无影响)存储(用于设置)和 PHP

发布于 2024-10-20 08:32:37 字数 1554 浏览 5 评论 0原文

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

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

job.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!';

interface.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_getsetting_set - 它们只是假设的函数,可以轻松地用平面文件或数据库替换。 问题是它们被调用很多,这就是为什么它们应该运行得快并且消耗很少的内存(如果可能的话,甚至根本不消耗内存)。

有想法吗?

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

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

I'm sorry if the title sounds confusing, if you get any better ideas after this description, feel free to suggest.

In short, I'm using PHP on Linux with the following hypothetical files/code:

job.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!';

interface.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>';

The code should be quite self-explanatory. Basically, job.php should be able to run only a single instance, indefinitely until the user specifically stops it from interface.php, which is there to mediate between the user and the job.

My problem is setting_get and setting_set - they're just hypothetical functions which can be easily replaced with a flatfile or a database.
The thing is that they're called a lot which is why they should run fast as well consume little memory (if possible, even none at all).

Ideas?

Edit: It should be noted that the settings I'm saving so far could as well be a simple boolean flag.

Edit2 With regards to Memcached / APC / Redis. I was wondering, couldn't I use the normal mysql functions over a DB of type MEMORY? I wonder how much overhead there is?
Thing is, I'd rather use something I've already got than having to install new stuff, but then again, it depends on implementation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

停滞 2024-10-27 08:32:37

How about APC's apc_store and apc_fetch?

风筝在阴天搁浅。 2024-10-27 08:32:37

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

你可以在 cron 中运行你的作业而没有这样的限制。

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

set_time_limit(0); // ad infinitum (in theory)

you can run your job in cron without such limit.

Use shared memory (fastest), memcached, redis (given in order of speed).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文