Главная > Заметки, Статьи > Рaссказы о MEMCACHE

Рaссказы о MEMCACHE

Сменив отдел на работе, т.е. почти поменяв работу до НГ, и перейдя в сопровождение могучего сайта, я столкнулся с такой интересной штукой под название Memcache
Что это такое? Это демон, т.е. процесс, висящий в памяти сервера, и являющийся хранилищем информации, можно задавать размер выделяемой под кэш памяти.
Что такое кеш — ну многие разработчики знают что это такая штука, которая хранит в себе информацию, дабы не давать плодиться трафику (мое описание) =)

Как работает этот кеш?

Возьмем пример с большими/тяжелыми запросами к БД, например есть запрос, который выполняется более 1 секунды, но возвращает информацию которая по сути обновляется раз в Nое количество пройденного времени.
Кол-во посетителей сайта больше 21000 человек в день, если каждый пользователь будет ждать по 2 секунды — это еще ниче, но вот если будет послано хотя бы 100−500 запросов продолжительностью 2 секунды MySQL, ему будет тяжело, а зачем мучить лишними запросами базу, если ее можно мучить раз в час, всего 1 раз, т.к. по условию, у нас информация обновляется через определенное кол-во времени, скажем час.
Итак — пример:

$sql = 'SELECT * FROM table WHER условие ORDER BY сортировка LIMIT 30';
$r = mysql_query($sql); // вот тут проиходит тормоз
>while($d = mysql_query($r))
	{
	//что то делаем с данными
	}

для того что бы использовать КЕШ, поправим код следующим образом:

$memcache = new Memcache;
$memcache -> connect('localhost') or die ("Could not connect to casheServer");
$n = 60; // 60 минут

// получаем массив из кеша
$array = memcahce_get($memcache, 'sql_array');
// Если массива нет
>if(!is_array($array))
	{
	// генерим данные
	$array = array();
	$sql = 'SELECT * FROM table WHER условие ORDER BY сортировка LIMIT 30';
	$r = mysql_query($sql); // вот тут проиходит тормоз
	while($d = mysql_query($r))
		{
		$array[] = $d;
		}
	// заносим их в кеш на N минут
	memcache_set( $memcache, 'sql_array', $photos_ids, 0, $n*60 );
	}
print_r($array);

скорость возрастет в несколько раз, только при учете, что у Вас реально есть тяжелые запросы, которые выполняются долго.

Проверить скорость запросов можно следующим методом:

$debug = array();
function mysql_query_exec($query)
	{
	global $debug;
	$GMT = getmicrotime();
	$T   = time();
	$ReturnQuery = mysql_query($query);
	$CGMT = round(getmicrotime() - $GMT,5);
	$TIME = time() - $T;
	$debug['querys'][] = array('time' => ( $CGMT + $TIME ),'query' => $query);
	if (!isset($debug['timeQuery'])) $debug['timeQuery'] = 0;
	$debug['timeQuery'] = $debug['timeQuery'] + ( $CGMT + $TIME );
	return $ReturnQuery;
	}
$sql = 'SELECT * FROM table WHER условие ORDER BY сортировка LIMIT 30';
$r = mysql_query_exec($sql); // вот тут проиходит тормоз
print_R($debug);

на экране покажутся все запросы и их время выполнения

Взять тут: http://pecl.php.net/package/memcache

Заметки, Статьи , , , , ,

  1. 15 Март 2009 из 12:08 | #1

    Я внимательно читал второй абзац и не вкурил суть изложенного

  2. 16 Март 2009 из 9:32 | #2

    Если ты реально писал это для новичков, то стоило расписать более подробно…

  3. 18 Март 2009 из 2:58 | #3

    Привет, статья интересная и я тоже процитирую у себя в блоге

  4. 21 Март 2009 из 9:25 | #4

    Да уж… Тут как люди раньше говорили: Азбуку учат — во всю избу кричат :)

  5. 22 Март 2009 из 3:07 | #5

    Прикольно написано и читать интересно

  6. 23 Март 2009 из 15:13 | #6

    решил помочь и разослал пост в соц. Закладки. Надеюсь поднимется популярность.

  7. 24 Март 2009 из 15:46 | #8

    Ура!, тот кто писал ништяк написал!

  8. 24 Март 2009 из 16:46 | #9

    Спасибо :)

  9. 25 Март 2009 из 16:32 | #10

    Я конечно, мало, что смыслю в посте, но постараюсь осилить.

  10. 26 Март 2009 из 11:02 | #11

    А в чем смысл добавлять свой блог на Фид-бернер? Траф это увеличит или что? (извините: за оффтоп) :)

  11. 27 Март 2009 из 14:55 | #13

    А Вы не задумывались о том, чтобы параллельно завести еще один блог, на смежную тему? У Вас неплохо получается :)

  12. 31 Март 2009 из 21:55 | #14

    Вот именно с этой статьи начинаю читать Ваш блог. Плюс один подписчик

  13. 01 Апр 2009 из 23:56 | #15

    Сорри за оффтоп, не подскажете, где мона такой же симпатичный шаблон для блога взять?

  14. 03 Апр 2009 из 2:55 | #17

    Думаю многие будут не согласны

  15. 05 Апр 2009 из 0:34 | #19

    решил помочь и разослал пост в соц. Закладки. Надеюсь поднимется популярность.

  16. 07 Апр 2009 из 21:52 | #20

    Вот именно с этой статьи начинаю читать этот блог. Плюс один подписчик :)

  17. 07 Апр 2009 из 22:30 | #21

    Слушай, ты долго вот такой пост писал? Жутко хочется узнать...

  18. 08 Апр 2009 из 4:50 | #22

    Слушай, как долго вот такой текст сочинял? Жутко интересно...

  19. 08 Апр 2009 из 11:57 | #23

    А как вы смотрите, чтобы завести на блоге раздел «самые горячие обсуждения» ну или типа того. Там можно будет комментировать наиболее горячие статьи вашего блога

  20. 11 Апр 2009 из 21:59 | #24

    +1 к предыдущему комменту :)

  21. 19 Апр 2009 из 0:45 | #25

    Спасибо за простой пример — сейчас как раз подумываю часть запросов переписать с использованием memcache :)

  22. 19 Апр 2009 из 0:47 | #26

    Спасибо, давно искал этот метод.

  1. Трекбеков пока нет.