Memcached против APC, какой выбрать? [закрыто]

161

Я читаю эту статью: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ с давних времен, когда ... Я хочу получить лучший доступный механизм кэширования, чтобы мое приложение было действительно быстрым. Конечно, я не хочу перегружать кеш, но я хочу, по крайней мере, выбрать лучшее, что есть. В этой статье говорится, что Memcached работает медленно, а apc работает быстро, так почему же все выбирают memcached ?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels здесь говорит: «используйте быстрый (но ограниченный) как Apc, Memcache ... и "медленный", такой как File, Sqlite ... "Как вы думаете, использование Apc в качестве быстрого и Memcache в качестве медленного является хорошей идеей?

Thomaschaaf
источник
14
Кстати: вы должны использовать APC, даже если вы не используете apc_store. Один только кэш кода операции делает PHP в несколько раз быстрее.
Корнел
@porneL: что ты имеешь в виду? Увеличивает ли APC скорость PHP после установки, даже если я не добавляю код для кэширования чего-либо в моих скриптах?
Марко Демайо
5
@ Марко Демайо: Действительно. APC - это в основном оптимизатор PHP (оптимизируется по умолчанию, если он включен), и apc_store()является дополнительным бонусом.
Корнель
3
в 2014 году, если вы используете его только для кэширования на 1 сервере, перейдите на APCu.
Флион
Также stackoverflow.com/q/930877/632951
Pacerier

Ответы:

268

Memcached - это распределенная система кэширования, тогда как APC является нераспределенной - и в основном это кэш кода операции.

Если (и только если) у вас есть веб-приложение, которое должно работать на разных веб-серверах (балансировка нагрузки), вы должны использовать memcache для распределенного кэширования. Если нет, просто придерживайтесь APC и его кеша.

Вы всегда должны использовать кэш кода операции, который является APC (также APC будет интегрирован в php6 iirc, так почему бы не начать использовать его сейчас).

Вы можете / должны использовать оба для разных целей.

Карстен
источник
5
Потрясающий ответ +1. Мой вопрос сейчас, что такое opcodeкеш?
Марко Демайо
4
@Karsten Если у вас есть разные серверы (например, облачная среда с нагрузкой), если вам не нужно поддерживать / совместно использовать состояние для них, APC также будет работать нормально, как кэш-память прямого доступа - хотя, возможно, не так оптимально, как каждый Облачный экземпляр должен будет согреть собственный кеш ...
Рэй
35
opcodeКэш один , который компилирует простой PHP код в машинный код ( «опкод») , а затем сохраняет его в обобщенной форме для запросов будущих (до тех пор, пока не обнаружит исходный PHP файл был изменен). Это означает, что PHP не должен запускать этот шаг компиляции при каждом отдельном запросе, что экономит время. Это только один из способов обеспечить быстрый сайт (среди многих других).
Саймон Ист
2
Вот интересное слайд-шоу, которое объясняет некоторые различия с диаграммами и тестами
Simon East,
1
Можно ли использовать memechached в нераспределенной системе вместо APC? Будет хорошо оставить только один, если в будущем у вас будет больше машин. право? Или использовать их обоих, один для кода операции, а другой для расширяемого кэширования?
Адиб Аруи
43

Memcached, если вам нужно сохранить состояние на нескольких веб-серверах (если вы сбалансировали нагрузку и важно, чтобы содержимое кэша было одинаковым для всех серверов).

APC, если вам просто нужен доступ к быстрой памяти для чтения (и записи) на (или на каждом) сервере.

Помните, что APC может также компилировать и ускорить время выполнения вашего скрипта. Таким образом, вы можете, например, использовать APC для увеличения производительности при использовании memcached для хранения кеша.

оборота xkcd150
источник
3
APC тоже может кешировать память .... Или?
mr_app
7
Обновление 2014 года: PHP 5.5 будет изначально включать Zend Optimizer Plus (который предназначен только для opcache, а не для пользовательского кэша), и кажется, что APC не будет разрабатываться после PHP 5.4? Однако теперь есть APCu pecl.php.net/package/APCu , который занял только части пользовательского кэша APC
Flion,
18

Основным преимуществом APC является кэш кода операции. Поскольку PHP 5.5 интегрировал OpCache в свое ядро ​​и APC для PHP 5.4 по-прежнему помечен как бета-версия, это не официальное объявление, но разработка APC будет прекращена в ближайшем будущем.

Поэтому я бы порекомендовал вам выбрать Memcached.

Хиеу Во
источник
5
Я провел часы в Интернете, чтобы думать об этом, и у меня такой же вывод.
Николас Зозол
9

Я использую как один для скорости, так и другой для синхронизации всех моих серверов. Если вы используете memcache, помните об открытых портах, которые вам нужно будет заблокировать с помощью iptables.

Саймон Ловелл
источник
6

Привет, Thomaschaaf, я надеюсь, что это не инструмент для вас поздно, но, пожалуйста, обратите внимание, что у APC есть некоторые проблемы, связанные с "пользовательским кэшем". Короче говоря, когда вы устанавливаете тайм-ауты для записей кэша или если ваш apache падает во внутреннем коде APC (тайм-аут, например), вы можете столкнуться с некоторыми проблемами.

У меня есть запись о проблеме здесь: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html , и вы также должны прочитать http: //t3.dotgnu. info / blog / php / user-cache-timebomb.html (от одного из разработчиков APC, я думаю)

Нир Леви
источник
22
Я наткнулся на это и хотел обновить, что, кажется, к нему обращаются сейчас (как и должно быть, 2 года спустя!). Вот закрытый отчет об ошибках, например: bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529
Шейн Х,
1

Я использую только APC, поскольку APC является кешем кода и действует как memcache! Только 1 файл конфигурации вместо 2.

И только 1 место для мониторинга обоих кешей .....

Томас Деко
источник
1

Это зависит от того, что вы делаете, но для моих сайтов drupal, работающих на VPS, я считаю, что APC отлично работает! Если вы используете CentOS 6, он доступен как ням-обновление, настолько простое в установке и не требующее настройки, как настройки по умолчанию. Ежу понятно имхо.

Фред
источник