У меня есть машина Debian, на которой я использую как apache2 (с mod_proxy), так и Lighttpd (для службы длительного опроса и статического содержимого).
И apache, и lighttpd запускают php5 с APC.
Lighttp использует FastCGI для php5.
Теперь обе среды работают хорошо, но кеш APC разделен. Есть ли способ указать lighttpd и apache использовать один и тот же кеш APC?
Пример того, что я хочу получить:
//example.com, served by apache2:
<?php
apc_add('foo', 'bar');
echo apc_fetch('foo');
//output: bar
?>
//polling.example.com, served by lighttpd:
<?php
echo apc_fetch('foo');
//output desired: bar
//actual output: nothing!
?>
p.s: Я думаю, что это связано с ошибкой сервера, если нет, я опубликую в Stackoverflow.
РЕДАКТИРОВАТЬ: После прочтения ответа Дэна и поиска также на переполнение стека, ясно, что на данный момент APC cache НЕ МОЖЕТ БЫТЬ ОБЩИЙ, когда кому-то нужна эта точка, необходимо выбрать другую систему кеширования (как memcache, то есть медленнее, чем APC
Не стесняйтесь закрыть этот вопрос, если он считается дубликатом SO.
Основываясь на информации в этом выдающемся Билет запроса функции PECL для APC, о совместном использовании данных кеша и блокировках между несколькими процессами FCGI в одной среде httpd, я бы сказал, что это также невозможно сделать между несколькими средами httpd.
Отредактируйте, чтобы добавить:
Вы все равно получите некоторую выгоду от использования APC. Первоначальные результаты после запуска демонов могут быть не очень хорошими, но со временем кэш для каждого процесса будет заполнен и использован повторно. memcache и APC выполняют аналогичные функции, поскольку они «кэшируют информацию», но их фактические цели совершенно разные. memcache - это кеш ключ-значение для данных, а APC - кеш кода операции для кода.
Я не знаю, может ли кеш APC использоваться несколькими (FastCGI) экземплярами PHP, но, возможно, memcached или аналогичная программа может решить вашу проблему. Однако вам придется изменить свои сценарии PHP.