APC и PHP - сломанные сайты из-за смешивания кэша - PullRequest
8 голосов
/ 17 апреля 2011

Я надеюсь, что кто-то может помочь мне разобраться в этом.Недавно я запустил APC на некоторых своих серверах, на которых размещено только одно приложение, и оно отлично работает.К сожалению, я пошел, чтобы запустить его сегодня вечером на своем веб-сервере рабочей лошадки, и как только я включил его, я начал получать "микширование" из моих блогов WordPress.Первый загружаемый блог будет кешировать информацию базы данных, а затем каждый загруженный блог получит ошибку базы данных.

Я хочу знать, есть ли способ как-то префикс кешировать каким-либо образомтак что я могу избежать этой проблемы.Я предположил , что кэш будет учитывать различия в абсолютных путях между файлами и не использовать одну и ту же кэшированную копию на нескольких сайтах ... FAIL

Заранее спасибо!

Обновление

В соответствии с запросом здесь находится копия файла apc.ini, который я использую в /etc/php.d/ для переопределения настроек по умолчанию:

/ etc / php.d / apc.ini

extension=apc.so
apc.shm_size                    = 64M
apc.max_file_size               = 8M
apc.include_once_override       = 1
apc.stat_ctime                  = 1

Ответы [ 7 ]

6 голосов
/ 11 мая 2011

Насколько я знаю, вы не можете использовать глобальные настройки для установки префикса для различных приложений. Вы можете изменить имена ключей и добавить префикс к их именам. Если вы более опытны, вы можете использовать два разных экземпляра php с помощью fastcgi, в зависимости от того, какой http-сервер вы используете. Мы делаем что-то подобное, используя APC и ngix:)

4 голосов
/ 12 мая 2011

Вы пробовали установить apc.file_md5 на On? Другие директивы, которые могут иметь значение:

  • apc.canonicalize (Если включено, относительные пути канонизируются в режиме без статов.)
  • apc.preload_path (Понятия не имею, правда ...)

В зависимости от вашей цели, я считаю, что apc.file_md5 или apc.canonicalize помогут.

2 голосов
/ 05 сентября 2011

Если вы используете Doctrine ORM и включили кэширование APC без указания префикса, это может вызвать проблемы.

В моем случае, используя платформу Symfony и вслепую следуя инструкции на http://symfony -check.org / привел к микшированию кэша APC.

Благодаря ребятам из Apostrope Now https://groups.google.com/d/msg/apostrophenow/1Z79wc4wjQk/6Vi2jLjP-twJ кажется, что вам нужно указать уникальный префикс кеша Doctrine.

/config/ProjectConfiguration.class.php</p> <pre>public function configureDoctrine(Doctrine_Manager $manager) { $manager->setAttribute(Doctrine::ATTR_QUERY_CACHE, new Doctrine_Cache_Apc(array('prefix' => 'something_unique')); }

2 голосов
/ 14 мая 2011

WordPress добавляет записи в кеш для сохранения запросов к БД?Если это так, вам нужно отредактировать файл библиотеки кеша, включив в него префикс.

Я предполагаю, что вы используете плагин WordPress?Если так, то какой плагин?

1 голос
/ 27 июня 2012

Вы уже пробовали отображение памяти? Кажется (я собираюсь попробовать это!), Он должен работать нормально, и, используя php-fpm и пулы, он позволяет вам иметь разные учетные записи с разными кэшами ...!
Вот ссылка, которая может вас заинтересовать: http://ravirajsblog.blogspot.it/2012/02/php-apc-locking-mechanism.html:)

0 голосов
/ 09 мая 2013

Мне просто пришлось разобраться с этой проблемой .. Я добавил следующие параметры apc

apc.file_md5 = 1
apc.canonicalize = 0 

Не уверен, помогло ли это или переменная, которую я добавил в файл. Однако в моем случае это были перепутанные файлы в одном веб-корне, которые, как оказалось, существуют по разным путям, имеют одинаковое имя и один и тот же «заголовок».

0 голосов
/ 14 мая 2011

У меня есть модуль, который может вам помочь: http://github.com/jamm/memory
Там вы можете использовать префиксы, теги для ключей и другие преимущества.
И вы можете изменить кэш-память (APC, memcache, shm-memory) безизменение вашего кода (один интерфейс для всех хранилищ).

edit: это для кеша пользователя, поэтому это не решит вашу проблему.Вы упомянули это поздно:)

...