Pregunta

Siento que la velocidad de Memcached en mi sitio web es más lenta que las consultas de MySQL. Consulte la captura de pantalla de mi sitio web que obtuve de la nueva reliquia.

ingrese la descripción de la imagen aquí

No sé cómo optimizar memcached en mi servidor de Cientos. Consulte las capturas de pantalla de configuración y rendimiento de Memcached. Siento que el número de conexiones totales es alta.

ingrese la descripción de la imagen aquí

Por favor vea las estadísticas en vivo a continuación ingrese la descripción de la imagen aquí

Lo siguiente es cómo uso memcached en mi sitio web

<?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;
                }
        }
}

y al final de cada página PHP, utilizo la siguiente manera de cerrar la conexión

if(isset($memcache)){                                                                 
     $memcache->close();
}

¿Necesito más recuerdos para este servidor? ¿Cómo reducir el número de conexiones? ¿Alguna sugerencia para mejorar el rendimiento?

-------------- Editar ------------------------

Como los comentarios mencionados, las conexiones actuales son 9. Las conexiones totales son 671731. El número de conexiones puede no ser un problema.

¿Fue útil?

Solución

Aquí hay algunas maneras de hacer que esto sea más rápido.

Las conexiones totales son en realidad cuántas conexiones se han creado para memcached.

Primero, use la extensión Memcached PHP, no la extensión Memcache. Son enteramente diferentes y la extensión Memcache está bastante despreciada a la muerte. La extensión Memcached usa libmemcached, que es increíblemente más rápida y tiene mejores características (como el protocolo binario, mejores tiempos de espera, UDP)

Segundo, use conexiones persistentes. Para su carga de trabajo, estos deben ser completamente suficientes y reducir el costo de volver a conectarse constantemente a Memcache.

Tercero, use MULTI GET / SET / BORRAR / etc. Si sabe que necesitará 10 teclas Memcache en su solicitud, solicite los 10 a la vez. Esto puede darle un gran aumento de rendimiento si está en bucle sobre las solicitudes de memcache en cualquier punto.

Otra advertencia es que Newrélico es históricamente malo en la presentación de tiempo de reportar en Memcache. Puede interpretar erróneamente el tiempo dedicado a PHP como el tiempo dedicado a Memcache debido a cómo el instrumento el motor Zend.

En cuanto a por qué su desempeño Memcache y MySQL están tan cerca, lo más probable es que esté ejecutando consultas bastante simples, por lo que el tiempo empleado en Memcache y en MySQL son comparables. Memcache es extremadamente rápido, pero también es un salto de red y que suele ser la mayor cantidad de tiempo dedicado a la espera de Memcache. Puede intentar ejecutar memcache localmente o usar APC en lugar de Memcache si realmente solo tiene 1 servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top