Linux высокоскоростное (/ не влияет) хранилище (для настроек) и PHP
Извините, если название звучит запутанно, если после этого описания у вас появятся идеи получше, смело предлагайте.
Короче говоря, я использую PHP в Linux со следующими гипотетическими файлами / кодами:
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_get
а также setting_set
- это просто гипотетические функции, которые можно легко заменить на плоский файл или базу данных. Дело в том, что их много называют, поэтому они должны работать быстро, а также потреблять мало памяти (если возможно, даже совсем).
Идеи?
Изменить: Следует отметить, что настройки, которые я сохраняю до сих пор, может быть простым логическим флагом.
Edit2 Относительно Memcached / APC / Redis. Мне было интересно, не могу ли я использовать обычные функции mysql над БД типа MEMORY? Интересно, сколько там накладных расходов? Дело в том, что я предпочел бы использовать то, что у меня уже есть, чем устанавливать новые вещи, но опять же, это зависит от реализации.
2 ответа
set_time_limit(0); // до бесконечности (в теории)
Вы можете запустить свою работу в cron
без такого лимита.
Используйте разделяемую память (самая быстрая), memcached, redis (дано в порядке скорости).