Я чувствую, что скорость Memcached на моем сайте медленнее запросов Mysql. Посмотрите скриншот о производительности моего веб-сайта, который я получил от New Relic.
Я не знаю, как оптимизировать memcached на моем сервере CentOS. См. Скриншоты конфигурации и производительности Memcached. Я чувствую, что число Total Connections велико.
Посмотрите статистику Live ниже
Ниже приведен пример использования Memcached на моем веб-сайте
<?php class dataCache { function setMemData($key, $var, $flag = false, $expire = 36000) { global $memcache; if (!$memcache) { $memcache = new Memcache; $memcache->connect('localhost', 11211) or die("Could not connect"); } if ($result = $memcache->set($key, $var, $flag, time() + $expire)) { return TRUE; } else { return FALSE; } } function getMemData($key) { global $memcache; if (!$memcache) { $memcache = new Memcache; $memcache->connect('localhost', 11211) or die("Could not connect"); } if ($data = $memcache->get($key)) { return $data; } else { return FALSE; } } function delMemData($key) { global $memcache; if (!$memcache) { $memcache = new Memcache; $memcache->connect('localhost', 11211) or die("Could not connect"); } if ($result = $memcache->delete($key)) { return TRUE; } else { return FALSE; } } }
И в конце каждой страницы PHP я использую следующий способ закрытия соединения
if(isset($memcache)){ $memcache->close(); }
Нужно ли мне больше памяти для этого сервера? Как уменьшить количество подключений? Любые предложения по улучшению производительности?
————–РЕДАКТИРОВАТЬ————————
Как отмечалось в комментариях, текущие соединения равны 9. Общее количество соединений – 671731. Количество соединений может не быть проблемой.
Вот несколько способов сделать это быстрее.
Общее количество соединений на самом деле связано с тем, сколько соединений было создано для memcached.
Во-первых, используйте расширение memcached php НЕ расширение memcache. Они совершенно разные, а расширение memcache довольно устарело до смерти. Расширение Memcached использует libmemcached, что невероятно быстро и имеет лучшие функции (например, бинарный протокол, лучшие тайм-ауты, udp)
Во-вторых, используйте постоянные соединения. Для вашей рабочей нагрузки они должны быть полностью достаточными и снизить затраты на постоянное повторное подключение к memcache.
В-третьих, используйте multi get / set / delete / etc. Если вы знаете, что в вашем запросе вам понадобится 10 ключей memcache, попросите все 10 сразу. Это может дать вам большое увеличение производительности, если вы производите цикл запросов memcache в любой момент.
Еще одно предостережение заключается в том, что NewRelic исторически BAD при сообщении времени, проведенного в memcache. Он может неправильно сообщать время, проведенное в php, как время, проведенное в memcache из-за того, как инструмент движет zend.
Что касается того, почему производительность memcache и mysql настолько близка, вы, скорее всего, выполняете довольно простые запросы, поэтому время, потраченное на memcache и на mysql, сопоставимо. Memcache чрезвычайно быстрый, но он также является сетевым хопом, и это, как правило, самый большой объем времени, потраченного на ожидание memcache. Вы можете попробовать запустить memcache локально или использовать APC вместо memcache, если у вас действительно только 1 сервер.