Який я маю вибрати? [зачинено]


161

Я читав цю статтю: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ з того часу, коли .. Я хочу отримати найкращий доступний механізм кешування, щоб мій додаток був дійсно швидким. Звичайно, я не хочу надмірно кешувати, але хочу хоча б вибрати найкраще. У цій статті сказано, що Memcached повільний, а apc - швидкий, тому чому всі обирають запам’ятовувані ?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels тут говорить "використовувати швидкий (але обмежений), як Apc, Memcache ... і a "повільний" такий, як File, Sqlite ... "Ви вважаєте, що використання Apc як швидкого та Memcache як повільний - це гарна ідея?


14
BTW: ви повинні використовувати APC, навіть якщо ви не використовуєте apc_store. Один кеш-код опкоду робить PHP в кілька разів швидшим.
Корнель

@porneL: що ти маєш на увазі? Чи збільшує APC швидкість PHP лише після встановлення, навіть якщо я не додаю код для кешування нічого у своїх скриптах?
Марко Демайо

5
@Marco Demaio: Дійсно. APC - це в основному оптимізатор PHP (оптимізується за замовчуванням, доки він включений), і apc_store()це лише додатковий бонус.
Корнель

3
у 2014 році, якщо ви використовуєте його лише для кешування на 1 сервері, перейдіть на APCu.
Фліон

Відповіді:


268

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

Якщо (і лише якщо) у вас є веб-додаток, який повинен працювати на різних веб-серверах (балансування навантаження), ви повинні використовувати memcache для розподіленого кешування. Якщо ні, просто дотримуйтесь APC та його кеш.

Ви завжди повинні використовувати кеш-код опкоду, яким є APC (APC також буде інтегрований у php6 iirc, так чому б не почати його використовувати зараз).

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


5
Приголомшлива відповідь +1. Моє питання зараз - що таке opcodeкеш?
Марко Демайо

4
@Karsten Якщо у вас різні сервери (наприклад, хмарне середовище з урівноваженим навантаженням) до тих пір, поки вам не потрібно підтримувати / ділити стан через них, APC також буде чудово працювати як кеш прямої пам'яті - хоча, можливо, не настільки оптимально, як кожен хмарний екземпляр повинен буде зігріти власний кеш ...
Рей

35
opcodeКеш один , який компілює простий PHP код в машинний код ( «опкод») , а потім зберігає його в узагальненій формі для запитів майбутніх (до тих пір, поки не виявить вихідний PHP файл був змінений). Це означає, що PHP не повинен виконувати цей етап компіляції для кожного запиту, економлячи деякий час. Це лише один із способів допомогти забезпечити швидкий сайт (серед багатьох інших).
Simon Simon

2
Тут є цікаве слайд-шоу, яке пояснює деякі відмінності з діаграмами та орієнтирами, тут: slideshare.net/FordAntiTrust/php-performance-with-apc-memcached
Simon East

1
Чи можна використовувати мемкешовані в нерозподіленій системі замість APC? Добре буде зберегти лише одну, якщо в майбутньому у вас буде більше машин. правильно? Або використовувати їх обидва, один для опкоду, а інший для кешування, що розширюється?
Адіб Аруй

43

Запам’ятовується, якщо вам потрібно зберегти стан на кількох веб-серверах (якщо ви завантажуєте збалансовано і важливо, щоб те, що знаходиться в кеші, було однаковим для всіх серверів).

APC, якщо вам просто потрібен доступ до швидкої пам'яті для читання (запису) на (або кожному) сервері.

Пам'ятайте, що APC також може компілювати та пришвидшити час виконання сценарію. Таким чином, ви можете, наприклад, використовувати APC для підвищення продуктивності виконання, використовуючи при цьому запам’ятовування для зберігання кешу.


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 є деякі проблеми, пов'язані з "кешем користувача". Якщо зробити короткий короткий опис, коли ви встановлюєте тайм-аути для записів кешу або якщо ваш апаш виходить із внутрішнього коду 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
Shane H

1

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

І лише 1 місце для моніторингу обох кешів .....


1

Це залежить від того, що ви робите, але для моїх друпальних веб-сайтів, що працюють на VPS, я вважаю, що APC працює чудово! Якщо ви використовуєте CentOS 6, він доступний як оновлення yum, так просто в установці та без конфігурації, оскільки значення за замовчуванням є розумним. Ніякий монітор імхо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.