memcached (как прослойка между php и MySQL) для чайников

memcached (как прослойка между php и MySQL) для чайниковСегодня большой день, я прикрутил, в конце концов, нормальное и близкое к “продакшн” решение для кеширования между php и DB (mysql). Выбор мой пал на memcached (http://danga.com/memcached/). Система эта была разработана для ЖЖ, но теперь используется и на ряде других проектов, в том числе на LiveJournal, Wikipedia, Flickr, Bebo, Twitter, Typepad, Yellowbot, Youtube, Digg, WordPress, Craigslist, Mixi и тысячах других к нашему проекту Free Ringtones. Нагрузка там, к счастью, имеет обыкновение расти и вот – теперь мне удалось её значительно снизить путем манипуляций, которые заняли не более 3-х часов. Подсказки для начинающий таковы – если вы хотите хранить данные, вытащенные из базы, рекомендую для этого использовать методы, аналогичные getAll в Pear::DB, что бы не пришлось запихивать в кеш результаты запроса построчно. Изначально продумайте возможность распределения запросов на несколько memcached серверов.
Создайте массив $MEMCACHE_SERVERS с айпи адресами серверов
и добавляйте их все в цикле

foreach($MEMCACHE_SERVERS as $server){
$memcache->addServer ( $server );
}

Так же, могу посоветовать ознакомиться с отличным видео, где Андрей Смирнов описывает “на пальцах” основные достоинства библиотеки.

А вот и мои результаты за первые пару минут. Зелёный столбик – это попадания в кеш. Бежевый – это запросы к БД.
     Hits         &          Misses
Зелёный столбик - это попадания в кеш. Бежевый - это запросы к БД.
Как видите – за 10-15 минут я уберёг БД почти от тысячи лишних запросов. Это при том, что для этого проекта использовался еще 1 уровень кеширования, на уровне сохранения готовых страниц в ФС.

Leave a Comment