В этой коротенькой статье, я хочу рассказать, что такое мемкеш и показать простой пример его использования.
Рано или поздно в веб-разработке приходиться сталкиваться с проектами, которые имеют довольно серьезную нагрузку – большое количество просмотров. Практически всегда, основная доля нагрузки связана с постоянным обращением к базе данных. В связи с этим могут возникать проблемы с работой проекта – сайт будет заметно медленнее работать, а иногда и вообще «падать». Для решения этой проблемы можно пойти несколькими путями. Первый простой, но финансово затратный – это купить более мощный сервер. И второй вариант – оптимизировать работу скриптов, тем самым снизив нагрузку.
«Жаба» подсказывает, что второй вариант более приемлемый. Именно его и попробуем разобрать. Как я уже и говорил – основная нагрузка случается из-за постоянного обращения к базе данных. Чтобы снизить количество запросов к базе можно воспользоваться замечательным инструментом – memcached – это программное обеспечение, реализующее кэширование данных в оперативной памяти. Работать напрямую с memcached в php нельзя, поэтому как связующая прослойка используются модуль – memcache.
С вариантом снижения нагрузки и способствующем в этом инструменте разобрались, остаётся только реализовать само кэширование – приведу пример кода, с подробными комментариями:
// подключение к мемкешу $memcache = new Memcache; $memcache->connect('localhost',11211); // подключение $vRevision = 1; // ревизия кеша, пригодиться для принудительного сброса кеша // пример использования $getResult = $memcache->get('key_'.$vRevision); // Проверяем наличие кеша, по ключу if ($getResult) { // если кеш есть // то используем его $resultData = array(); $resultData = $getResult; }else{ // если кеша нет, то // делаем запрос к бд, для получения данных $sql = mysql_query(" SELECT * FROM `users` ") or die(mysql_error()); $resultData = array(); while($r = mysql_fetch_array($sql, MYSQL_ASSOC)){ $resultData = $r; } // записываем данные в мемкеш на сутки - 86400 секунд $memcache->set('key_'.$vRevision, $resultData, false, 86400); } // вывод данных var_dump($resultData);
Напоследок хочу заметить, что помимо использования мемкеша, старайтесь всегда минимизировать количество запросов к базе данных, а также делать их как можно «легче».
Спасибо
Spasibo , to chto nuzhno
Нужно делать $resultData[] = $r;
иначе массим содержит только последнюю запись из таблицы