Який кеш PHP (опкод) слід використовувати і чому?


44

Я постійно чую про деякі кеші PHP (opcode), такі як APC, XCache, Memcache, eAccelerator тощо.

Але я ніколи не міг придумати, як рухатись із вибором одного. Окрім користі від продуктивності, яку має забезпечувати кешування, які інші фактори повинні викликати занепокоєння.

Наприклад, чому ви скажете, що система кешу X краще, ніж Y? Мене менше турбує відносне підвищення продуктивності. Невеликі відмінності між будь-якими двома системами мають значення менше.

Якщо загальна відповідь на моє запитання неможлива, ось кілька покажчиків. Я використовую виділений VPS з Mediatemple (з кореневим доступом). Оперативна пам’ять - 512 Мб (фізична) + 400 МБ (своп) Я стурбований WordPress та його двоюрідними братами WordPress-MU та BuddyPress. 90% наших кодів / сайтів належать до сімейства WordPress.

Заздалегідь дякую за допомогу.

Відповіді:


33

Перелічені вами товари служать різним цілям.

OPCode кеші

Існує багато прискорювачів PHP (OPCaches), як це бачиться в цьому списку Вікіпедії . Як це властиво продуктам з відкритим кодом, вони всі досить схожі. XCache - прискорювач PHP lighttp, і це вибір за замовчуванням, коли ви запускаєте цей HTTPd. Він також добре працює з Apache, однак APC, здається, трохи більше "грає добре з іншими" соціально кажучи, офіційно підтримується як частина PHP, і випускається в кроці з офіційним розподілом PHP.

Я відмовився від eAccelerator від usign через його уповільнення розвитку та відставання від випусків PHP, і офіційний блаженний статус APC пропонує з подібною продуктивністю.

Зазвичай ці продукти потрапляють; не змінюється код миттєвого підвищення продуктивності. З великими базами коду (Drupal, Wordpress) продуктивність може бути в 3 рази краща , скорочуючи час відгуку та використання пам'яті.

Кешування даних

Memcache - дещо інший продукт - ви можете подумати про це як про легку систему цінностей ключів, яку можна масштабувати на декількох серверах . Програмне забезпечення повинно бути вдосконалено для підтримки Memcache, і воно вирішує певні проблеми краще, ніж інші. Якщо у вас на веб-сайті був список цінностей запасів у реальному часі, ви можете використовувати Memcache, щоб зберегти список резидентів поточного значення, що відображається на вашому веб-сайті. Ви можете використовувати його для зберігання даних сеансу для короткочасного повторного використання. Ви б не використовували його для інших речей, таких як кеші на повній сторінці або як заміну для MySQL.

Існують також доповнення до Wordpress, такі як WP-Super-Cache, які можуть різко підвищити продуктивність Wordpress (infact, WP-Super-Cache може конкурувати зі статичними сайтами на базі HTML у багатьох випадках)

Підсумовуючи - я б дуже рекомендував APC, якщо ви хочете "встановити його і забути його, добре підтримуваний продукт".


Ця відповідь обговорюється в Meta: meta.stackexchange.com/questions/15474/…
Бред Гілберт

Заповніть " [4]: http://", щоб виправити це.
Бред Гілберт

Дякую тонну, SirStan! Ваша відповідь не тільки вирішила мою проблему, але й допомогла мені отримати більш глибоке розуміння світу кешування. Я просто хочу запитати у вас ще одну річ. Я вже використовую wp-supercache. Чи корисно поєднувати його з APC? Чи надалі APC значно покращить продуктивність? Чи працюватимуть APC і Wp-SuperCache разом? Чи потрібні вони обом? Або APC зробить Wp-SuperCache зайвим?
rahul286

Примітка. APC здійснює кешування даних та кешування оп-коду.
lo_fye

2
Ця відповідь зараз дуже датується. APC навряд чи буде оновлений для майбутніх версій PHP, які будуть замінені оптимізатором Zend та кешем коду (тепер відомим як opcache) з версії 5.5. Однак я не бачив суттєвої різниці в продуктивності ( symcbean.blogspot.co.uk/2013/09/… ), крім того, відсутність підтримки даних в Opcache та відсутність регенерації пам'яті може зробити оновлення лічильника продуктивним для деяких.
symcbean


6

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

Однак, я б хотів створити клас обгортки для будь-якого кешування (без коду). Таким чином ви можете поміняти місцями кешування двигуна, не змінюючи код.


ОГО. Якби я знав офіційний статус APC, я б перейшов до нього довгостроково ... :-) Я також не знав багато про різницю в кеш-пам'яті опкоду / некодування. Як особистий вибір, я не хочу переглядати витрати на створення класів обгортки або зміни джерела моїх програм, щоб допомогти їм адаптуватися з кешуванням env.
rahul286

6
Зауважте, оскільки PHP 5.5 інтегрував Zend Opcache як "офіційний" кеш-код коду, я думаю, що навряд чи вони перейдуть на APC для PHP 6.
Маттео Тассінарі

1
Щоб виправити це: PHP 5.5 дійсно поставляється із Zend Opcache. Не буде PHP 6. Натомість буде PHP 7. APC слід вважати майже (?) Застарілим.
Jisse Reitsma

6

Відзначимо, що все трохи змінилося, і здається, що APC не буде включений до ядра PHP 6.

APC має повільний розвиток, і схоже, що він ніколи не буде сумісним PHP 5.5. Через це, схоже, хлопці з PHP будуть встановлювати розширення кешу опкоду Zend OPCache як розширення PHP CORE. Вам цікаво читати більше тут http://wiki.php.net/rfc/optimizerplus .

Важлива примітка: Zend OPCache не має кеш даних користувачів, як APC, тому якщо вам потрібен кеш даних користувачів, ви можете використовувати його разом із Memcache.


1
Він також визнає недійсним весь кеш, коли він заповнений (недійсні записи НЕ видаляються) - отже, якщо у вас є більше коду, ніж пам'ять або часто розгортається, тоді очікуйте, що вони побачать сплески продуктивності.
symcbean

3

Якщо версія PHP працює не менше 5,50, OpCache - найкраща ставка (рідна бібліотека PHP / PECL). Він повинен бути попередньо складений, якщо встановлюється з двійкового.

http://php.net/manual/en/book.opcache.php

Якщо використовується версія PHP до версії 5.5, APC (PHP / PECL натиснений кеш OpCode) був би найпростішим вибором, хоча він вважається непорушеним та мертвим:

http://php.net/manual/en/book.apc.php

Використання вбудованої функціональності OpCache PHP повинно позбавити вас від проблем з підтримкою сторонніх бібліотек.


1
Якщо ви працюєте з PHP <5.5, перше, що вам слід зробити, - це оновити його.
Майкл Хемптон

@ michael-hampton :: Дійсно! Але в деяких рідкісних випадках ви не можете оновити PHP без оновлення ОС, що може означати навіть нову технічну вимогу. Приклад - Я працюю в компанії, що працює з серверами IBM i-series, версія 6somethings. Наша версія PHP 5.4.3. Оскільки IBM покладається на Zend для перенесення версій PHP, для PHP 5.6 потрібна нова версія ОС IBM-i - 7.1 або новіша (а згодом і новіша версія сервера Zend PHP), яка вимагає нових серверів Power-8 тощо. ... мех.
повтор

0

Memcache кешує пари ключів / значень, а не опкодів. Ви можете використовувати його спільно з одним із кешів опкодів.


З відповіді SirStan (внизу) видно, що для зміни моїх програм PHP може знадобитися мемаш-пам'ять. Насправді я використовую Wordpress і зміна його основного коду не буде гарною ідеєю.
rahul286
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.