Подтвердить что ты не робот

Memcache vs APC для кэширования данных на одном сервере

У меня есть один серверный сайт, который нажимает 200 тыс. экз. в день, а трафик удваивается примерно каждые 40 дней (в течение последних 5 месяцев в любом случае).

В основном я планирую кэшировать вывод функций mysql_query в течение часа или около того. Если кеш старше этого, запустите запрос, верните результат в кеш в течение еще одного часа.

My mysql DB имеет размер около 200 МБ (увеличивается на 10-20 мб/месяц).

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

К сожалению, с его сайта базы данных, который позволяет использовать многие методы сортировки, поиска и упорядочения, а также разбиение на страницы.... Есть более 150 000 кешированных страниц. Im также не кэширует поисковые запросы, которые вызывают большую часть нагрузки.

Я хотел бы реализовать систему кеширования, и мне хотелось узнать, какой из них быстрее. Хотелось бы увидеть некоторые ориентиры.

4b9b3361

Ответ 1

A быстрый googling говорит, что APC в 5 раз быстрее, чем Memcached.

Мой опыт говорит о том, что APC почти в 7-8 раз быстрее, чем Memcached.., но к memchached могут быть доступны различные службы (например, если вы запускаете главным образом apache и делегируете некоторый трафик, например статическое содержимое, такое как изображения или чистые html, к другому веб-сервису, например lighttpd), который может быть действительно полезным, если не незаменимым.

У APC меньше возможностей, чем memcached, и их легко использовать и оптимизировать, но это зависит от ваших потребностей.

Ответ 2

Как вы уже упоминали, есть несколько различных аспектов кеширования. Я, вероятно, сосредоточусь на следующих аспектах кэширования в вашем приложении php:

  • кэширование кода операции, которое кэширует скомпилированный байт-код скриптов php. Здесь вы можете увидеть эталон (хотя и в старой статье): http://itst.net/654-php-on-fire-three-opcode-caches-compared Примечание. Я настоятельно рекомендую использовать кэширование кода операции.

  • Кэширование пользовательских данных - APC и другие делают это. Это будут ваши справочные данные или данные, которые являются довольно статичными и не меняются часто. Вы можете очищать кеш каждый день или запускать чистый кеш при изменении этих эталонных данных. Это также настоятельно рекомендуется, поскольку обычно ссылочные данные часто используются и часто не меняются.

  • Кэширование sql-запросов - я знаю, что Zend упрощает эту задачу с помощью простой настройки. Поскольку эти запросы не меняются, это еще один очевидный (как вы упомянули)

Дополнительно (если возможно):

  • кэширование html-страниц - очевидно, кеширование статической страницы происходит быстрее, чем сгенерированное, и обычно это сложно сделать, поскольку большинство страниц в приложениях настолько динамичны. Стоит это, если вы можете это сделать, хотя если ваши запросы кэшируются, а ваш SQL-код прост, я бы не сосредоточился на этом.

  • Результаты кэширования sql - лично я держусь подальше от этого. Я позволю базе данных выполнять свою работу и что она делает лучше всего, поскольку СУБД обычно имеет кеширование. Я могу кэшировать результаты для потока выполнения (т.е. Я только что получил это, так что не делайте этого снова), но я не пойду намного дальше.

Я успешно использовал APC и eAccelerator (мне лично нравится работать с APC и предполагаемое кэширование кода операции и кэширование пользовательских данных для моих ссылочных данных и запросов sql). Используйте XDebug для описания вашего кода.

Ответ 3

Вы хотите сравнить хранилище ключей ключей APC и Memcache? Поскольку APC также делает кеш-код операции, это совсем другое.

Ну, на одной машине кеш файл APC k-v работает быстрее, чем memcache. Memcache имеет больше функциональности, но предназначен для распределенных сред, в то время как APC работает только на одном сервере.

Недавно я сделал тест, чтобы установить, а затем получить 1 миллион ключей в обоих случаях, каждая клавиша была последовательным целым числом, а значения были 32-байтной строкой.

За локальным хостом memcache может извлекать 12k ключей/секунду в одном потоке. APC вернул 90K/секунду. Однако, если вы используете многопоточность или "multi_get" с memcache, он очень близок к производительности APC.

Тест показал на 1GB vps на slicehost.

Ответ 4

в моем случае apc в 59 раз быстрее memcache

<?php
ini_set('apc.enable_cli','1'); //if u run in cli you may need to do changes in php.ini
error_reporting(E_ALL);
$mem=new Memcache();
$mem->connect('127.0.0.1',11211);
$mem->replace('testin','something');
$i=0;
$time=time()+microtime();
apc_store ( 'testin','something');
$num=1000000;
while($i<$num){
 $mem->get('testin');
$i++;
}
echo "memcache took: ",time()+microtime()-$time," for 1 million gets","\n";
$time=time()+microtime();
$i=0;
print_r(apc_fetch('testin'));
while($i<$num) {
apc_fetch('testin');
$i++;
}
echo "apc took: ",time()+microtime()-$time,"for 1 million gets \n";

здесь выводится

memcache took: 37.657398939133 for 1 million gets
somethingapc took: 0.64599800109863for 1 million gets

Ответ 5

Почти невозможно точно предсказать, что будет быстрее. Я бы запускал тесты как в среде разработки с аналогичными данными.

Когда производительность важна, всегда используйте профилировщик.

Ответ 6

Im использует IPB 3.1.4 с APC, он работает просто в два раза быстрее, чем без него.

Requests per second:    43.46 [#/sec] (mean)
Requests per second: 24.23 [#/sec] (mean)

Не тестируйте IPB с memcached еще