Domanda

Sento che la velocità di Memcached nel mio sito web è più lento delle query MySQL. Si prega di consultare lo screenshot delle prestazioni del mio sito web ho ottenuto dalla nuova reliquia.

Inserire l'immagine Descrizione qui

Non so come ottimizzare Memcached nel mio server CentOS. Si prega di consultare le screenshot di configurazione e prestazioni di Memcached. Sento che il numero di connessioni totali è elevato.

Inserire l'immagine Descrizione qui

Si prega di vedere le statistiche dal vivo qui sotto Inserisci Descrizione dell'immagine qui

Di seguito è di come uso Memcached nel mio sito 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;
                }
        }
}
.

E alla fine di ogni pagina PHP, utilizzo il seguente modo per chiudere la connessione

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

Ho bisogno di più ricordi per questo server? Come ridurre il numero di connessioni? Qualche suggerimento per migliorare le prestazioni?

-------------- Modifica ------------------------

Come menzionato i commenti, le connessioni correnti sono 9. Le connessioni totali sono 671731. Il numero di connessioni potrebbe non essere un problema.

È stato utile?

Soluzione

Qui ci sono alcuni modi per farti diventare più veloce.

Le tue connessioni totali sono in realtà il numero di connessioni sono state create per Memcached.

Innanzitutto, utilizzare l'estensione PHP MEMCACHED non è l'estensione Memcache. Sono del tutto diversi e l'estensione di memcache è praticamente deprecata alla morte. L'estensione memcached utilizza libmemcached che è incredibilmente più veloce e ha caratteristiche migliori (come il protocollo binario, timeout migliori, UDP)

Secondo, usa connessioni persistenti. Per il tuo carico di lavoro questi dovrebbero essere interamente sufficienti e ridurre il costo di riconnessione costantemente a MemCache.

In terzo luogo, utilizzare Multi Get / Set / Elimina / etc. Se sai che avrai bisogno di 10 chiavi Memcache nella tua richiesta, chiedi tutti 10 in una sola volta. Questo può darti un grande aumento delle prestazioni se stai passando su richiesta di memcache in qualsiasi momento.

Un altro avvertimento è che NewRelic è storicamente cattivo nel tempo di segnalazione trascorso in Memcache. Può errorizzare il tempo trascorso in PHP come il tempo trascorso in MemCache grazie a come lo strumento il motore zend.

Per quanto riguarda il motivo per cui le prestazioni di MemCache e MySQL sono così vicine, è molto probabile che sia possibile eseguire query piuttosto semplici in modo che il tempo trascorso su MemCache e su MySQL sia comparabile. Memcache è estremamente veloce ma è anche un hop di rete e questo è solitamente la quantità più grande del tempo trascorso in attesa di memcache. È possibile provare a eseguire memcache localmente o utilizzare APC anziché MemCache se hai davvero 1 server.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top