LA CAMPANA

C'è chi legge questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam

Il modulo Memcache fornisce comode interfacce procedurali e orientate agli oggetti al meccanismo di memorizzazione nella cache memcached. Memcache è un demone di cache molto efficiente che è stato specificamente progettato per ridurre il carico del database per applicazioni Web dinamiche e altamente caricate.

Il modulo memcache fornisce anche un gestore di sessioni. Ulteriori informazioni su Memcached sono disponibili su memcached.org

In linea di principio, le descrizioni di installazione e configurazione in russo sono pronte e puoi familiarizzare con esse.

Tieni presente che puoi memorizzare qualsiasi tipo di dati nella cache: variabili, oggetti e array, MA NON RISORSE!

Se un oggetto incorpora una proprietà, ad esempio una risorsa, una connessione a un database o contiene un altro oggetto con proprietà simili, questa situazione deve essere gestita separatamente, ad esempio ridefinendo il metodo __sleep () in cui questa risorsa deve essere "uccisa" e il metodo __wakeup () in cui questa risorsa deve essere ripristinata.

In effetti, tutti questi metodi possono essere divisi in 3 gruppi:

  1. Lavora con i valori
  2. Lavora con server e connessioni
  3. Ricezione delle informazioni

Lavora con i valori

I metodi di questo gruppo consentono di effettuare le seguenti operazioni:

  • Imposta valori
  • Elimina questi valori
  • Sostituisci questi valori
  • Accedi a questi valori tramite chiave
  • Gestisci valori a vita

Una coppia di metodi specifici per incrementare e decrementare i valori interi.

Memcache :: set ()
Memcache :: add ()

Consente di impostare un valore, impostare la compressione e la durata per questo valore. L'unica differenza nel comportamento di questi metodi è che il metodo Memcache :: add restituirà FALSE se è già impostato un valore con questa chiave.

bool Memcache :: add
bool Memcache :: set (stringa $ chiave, misto $ var [, int $ flag [, int $ expire]])

  • string $ key - la chiave del valore, usandola operiamo sul valore.
  • $ var misto è il valore.
  • costanti
connect ("localhost", 11211, 30); $ cache-\u003e add ("myfirst", 1000, MEMCACHE_COMPRESSED, 15); $ cache-\u003e set ("mysecond", 2000, MEMCACHE_COMPRESSED, 15);

Memcache :: get ()

Restituirà il valore richiesto o FALSO in caso di errore o se il valore con questa chiave non è stato ancora impostato.

Puoi passare un array di chiavi di valore, quindi Memcache :: get restituirà anche un array, conterrà le coppie chiave-valore trovate.

Avvertenze!

Se il nome della chiave contiene una barra rovesciata, allora i risultati saranno imprevedibili!

Memcached ha alcune piaghe: secondo alcuni rapporti, (a volte) soggetto a errori di overflow del buffer, che di tanto in tanto porta alla riscrittura di dati [parziali] e, pertanto, rende impossibile deserializzare le strutture, non dimenticare di controllare se, come risultato della ricezione di un array o di un oggetto, Memcache :: get restituisce bool, dobule o long, quindi qualcosa è andato storto.

corda Memcache :: get (stringa $ key [, int & $ flags])
Vettore Memcache :: get (array $ keys [, array & $ flags])

  • string $ key - la chiave del valore o una matrice di chiavi di cui si desidera ottenere i valori.
  • int $ flag - lo scopo di questo parametro rimane un mistero per me. Ho provato a utilizzare alcuni valori interi, ma non ha dato alcun effetto. E gli esempi sono dati principalmente senza usarlo, da cui ho concluso: puoi lavorare perfettamente senza di esso :)
connect ("localhost", 11211, 30); $ cache-\u003e add ("myfirst", 1000, MEMCACHE_COMPRESSED, 15); $ cache-\u003e set ("mysecond", 2000, MEMCACHE_COMPRESSED, 15); print_r ($ cache-\u003e get (array ("myfirst", "mysecond")));

Risultato:

Matrice (\u003d\u003e 1000 \u003d\u003e 2000)

Memcache :: delete ()

Elimina valore dalla cache.

Commento:

Questo metodo non funziona sempre (dipende dalla versione del software)! alla fine della pagina sono i casi in cui Memcache :: delete funziona e quando no.

Bene, dalle opzioni stabili rimane solo per ripristinare i valori non necessari:

$ cache-\u003e set ("three", NULL);

Solo un aspetto negativo: la chiave in questo caso non va da nessuna parte

corda Memcache :: delete (stringa $ key [, int $ timeout \u003d 0])

  • stringa $ chiave - valore chiave da eliminare.
  • int $ timeout - Anche questo parametro è obsoleto e non supportato, il valore predefinito è 0 secondi. Non utilizzare questa opzione.

Memcache :: replace ()

Sovrascrivi valore esistente.

Memcache :: replace () dovrebbe essere usato per sostituire valore esistente. Nel caso in cui il valore con tale chiave non esista, Memcache :: replace () restituisce FALSE. Altrimenti, Memcache :: replace () si comporta come Memcache :: set (). Puoi anche usare la funzione memcache_replace ()

corda Memcache :: sostituisci (stringa $ chiave, misto $ var [, int $ flag [, int $ expire]])

  • string $ key - la chiave il cui valore deve essere sostituito.
  • misto $ var è il nuovo valore.
  • int $ flag - Un flag che indica se utilizzare la compressione (qui è necessario Zlib) per il valore memorizzato, è possibile utilizzare le costanti
  • int $ expire - La durata del valore (cache). Se uguale a zero, quindi indefinitamente. È inoltre possibile utilizzare un timestamp o il numero di secondi a partire dall'ora corrente, ma il numero di secondi non può superare 2592000 (30 giorni).
connect ("localhost", 11211, 30); $ cache-\u003e add ("uno", 111, 0, 15); $ cache-\u003e add ("due", 222, 0, 15); $ cache-\u003e add ("tre", 333, 0, 15); $ cache-\u003e sostituisci ("tre", 777); print_r ($ cache-\u003e get (array ("one", "two", "three"))); Matrice (\u003d\u003e 111 \u003d\u003e 222 \u003d\u003e 777)

Memcache :: increment ()

Aumenta il valore della chiave specificata del valore specificato. Se il valore della chiave specificata non è numerico e non può essere convertito in un numero, cambierà il suo valore con quello specificato come secondo parametro. Memcache :: increment () non crea un elemento se non esiste già.

Non è consigliabile utilizzare Memcache :: increment () con i valori compressi (impostati con il flag MEMCACHE_COMPRESSED), perché quindi ci saranno "sorprese" quando si tenta di ottenere questi valori utilizzando Memcache :: get ()

Personalmente, ho controllato e non ho notato alcun problema :)

int Memcache :: increment

  • string $ key - la chiave di cui si desidera incrementare il valore.
  • int $ value è il valore dell'incremento.
connect ("localhost", 11211, 30); $ cache-\u003e set ("someOne", 10, 0, 5); $ cache-\u003e increment ("someOne", 10, 0, 5); $ cache-\u003e increment ("someOne", 10, 0, 5); echo $ cache-\u003e get ("someOne"); // stampa 30

Memcache :: decrement ()

Riduce il valore della chiave specificata del valore specificato. Simile a Memcache :: increment (), il valore corrente dell'elemento viene convertito in numerico e quindi diminuisce

int Memcache :: decrement (stringa $ key [, int $ value \u003d 1])

  • string $ key - la chiave il cui valore deve essere decrementato.
  • int $ value - valore di decremento.

Memcache :: flush ()

Memcache :: flush () invalida tutti i valori esistenti. Memcache :: flush () in realtà non libera risorse di memoria, ma contrassegna tutti gli elementi come obsoleti e la memoria occupata sarà disponibile per l'uso con nuovi valori. Inoltre puoi usare la funzione memcache_flush ()

bool Memcache :: flush (Void)

L'esempio seguente non genererà nulla.

connect ("localhost", 11211, 30); $ cache-\u003e set ("someOne", 111, 0, 5); $ cache-\u003e set ("someTwo", 222, 0, 5); $ cache-\u003e set ("someTree", 333, 0, 5); $ cache-\u003e flush (); // Cancella la cache print_r ($ cache-\u003e get (array ("someOne", "someTwo", "someTree")));

Lavora con server e connessioni.

Memcache può funzionare con un singolo server o un pool (set) di server.

Se si utilizzerà un solo server per la manutenzione della cache, quindi per l'inizializzazione del lavoro, sarà sufficiente creare un oggetto cache e utilizzare il metodo Memcache :: connect

Se hai intenzione di formare un pool di server, dovrai prima creare un oggetto cache, quindi utilizzare il metodo Memcache :: addServer aggiungere il numero richiesto di server ad esso.

Memcache :: connect ()

Stabilisce una connessione al server Memcached. Una connessione che è stata aperta utilizzando Memcache :: connect () verrà chiusa automaticamente alla fine dello script, ma è possibile chiuderla esplicitamente utilizzando Memcache :: close (). È inoltre possibile utilizzare la funzione memcache_connect (). Restituisce VERO in caso di successo o FALSO in caso di errore.

bool Memcache :: connect

connect ("localhost", 11211, 30);

Memcache :: pconnect ()

Questo metodo è simile a Memcache :: connect () con l'unica differenza che stabilisce una connessione persistente. Questa connessione non viene chiusa alla fine dello script e chiamando Memcache :: close (). È inoltre possibile utilizzare la funzione memcache_pconnect (). Restituisce un oggetto Memcache in caso di successo o FALSO in caso di errore.

misto Memcache :: pconnect (stringa $ host [, int $ port [, int $ timeout]])

  • Questo parametro può anche specificare altri trasporti, come unix: ///path/to/memcached.sock, ad es. utilizzare i socket UNIX, in questo caso la porta deve essere impostata su 0.
  • Impostare questo parametro su 0 se si prevede di utilizzare socket.
  • int $ timeout - Limite in secondi per la connessione al demone. Pensaci due volte prima di modificare il valore predefinito di 1 secondo: potresti perdere tutti i vantaggi della memorizzazione nella cache se la connessione impiega troppo tempo.
pconnect ("localhost", 11211, 30);

Memcache :: close ()

Chiude la connessione al server Memcached. Questa funzione non chiude le connessioni permanenti chiuse solo durante l'arresto / riavvio del server Web. Puoi anche usare la funzione memcache_close ().

bool Memcache :: chiudi (Void)

Memcache :: addServer ()

Aggiunge un server al pool di connessioni. La connessione che è stata aperta usando Memcache :: addServer () verrà chiusa automaticamente alla fine dello script, puoi anche chiuderla manualmente con Memcache :: close (). È possibile utilizzare la funzione memcache_add_server ()

Quando si utilizza Memcache :: addServer (diversamente da Memcache :: connect () e Memcache :: PConnect ()), la connessione di rete non viene stabilita fino a quando non è effettivamente necessaria. Pertanto, non vi è alcun sovraccarico quando si aggiunge un gran numero di server al pool, anche se non sono affatto necessari.

Il pool di server offre una maggiore tolleranza agli errori. Eventuali errori socket o errori Memcached a livello di server (diversi dagli errori di memoria) causeranno la ridistribuzione delle risorse. Gli errori del client come l'aggiunta di una chiave esistente non causeranno un errore.

Commento:

Restituisce VERO in caso di successo o FALSO in caso di errore.

bool Memcache :: addServer (stringa $ host [, int $ port \u003d 11211 [, bool $ persistent [, int $ weight [, int $ timeout [, int $ retry_interval [, bool $ status [, callable $ failure_callback [, int $ timeoutms]]]] ]]]])

  • string $ host - Host memorizzato. Questo parametro può anche specificare altri trasporti, come unix: ///path/to/memcached.sock, ad es. utilizzare i socket UNIX, in questo caso la porta deve essere impostata su 0.
  • int $ port - la porta su cui Memcached ascolta le connessioni. Impostare questo parametro su 0 se si prevede di utilizzare socket.
  • bool $ persistent - Imposta l'uso della connessione persistente. Il valore predefinito è TRUE.
  • int $ weight - Maggiore è, maggiore è la probabilità che questo server venga selezionato per memorizzare i valori. Coloro. questo è un tipo di "peso" del server nel pool generale, indirettamente è anche il carico stimato sul server.
  • int $ timeout - Limite in secondi per la connessione al demone. Pensaci due volte prima di modificare il valore predefinito di 1 secondo: potresti perdere tutti i vantaggi della memorizzazione nella cache se la connessione impiega troppo tempo.
  • stringa $ timeoutms - non descritto.

Ricezione delle informazioni

Memcache :: getExtendedStats ()

Restituisce una matrice associativa bidimensionale di statistiche del server. Una matrice di chiavi dell'host: tipo di porta del server. I valori contengono singoli parametri statistici. Il server non riuscito verrà impostato su FALSE. Puoi anche usare la funzione memcache_get_extended_stats ()

Commento:

Questa funzione è stata aggiunta a Memcache nella versione 2.0.0.

vettore Memcache :: getExtendedStats ([string $ type [, int $ slabid [, int $ limit \u003d 100]]])

E ora lo scherzo:

Il tipo di statistica "cache" è stato rimosso da Memcached per motivi di sicurezza.

Esempio di output di informazioni (chiamata senza parametri):

Matrice (\u003d\u003e Matrice (\u003d\u003e 5179 \u003d\u003e 966862 \u003d\u003e 1336505233 \u003d\u003e 1.4.5 \u003d\u003e 64 \u003d\u003e 160.302880 \u003d\u003e 483.975109 \u003d\u003e 6 \u003d\u003e 358080 \u003d\u003e 13 \u003d\u003e 15037476 \u003d\u003e 3501979 \u003d\u003e 46 \u003d\u003e 11507898 \u003d\u003e 3529578 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 76 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 0 \u003d\u003e 1643906080 \u003d\u003e 11298732744 \u003d\u003e 67108864 \u003d\u003e 1 \u003d\u003e 0 \u003d\u003e 4 \u003d\u003e 0 \u003d\u003e 3295454 \u003d\u003e 7623 \u003d\u003e 3501915 \u003d\u003e 0 \u003d\u003e 1825755) ...)

Memcache :: getServerStatus ()

Restituisce lo stato del server "online / offline". Puoi anche usare la funzione memcache_get_server_status ()

Commento:

Questa funzione è stata aggiunta a Memcache nella versione 2.0.0.

int Memcache :: getServerStatus (stringa $ host [, int $ port \u003d 11211])

  • string $ host - Host memorizzato.
  • int $ port - la porta su cui Memcached ascolta le connessioni.

Memcache :: getStats ()

Restituisce un array associativo con le statistiche del server. Un array di chiavi corrisponde a parametri e valori statistici per il valore del parametro. Puoi anche usare la funzione memcache_get_stats ()

vettore Memcache :: getStatss ([string $ type [, int $ slabid [, int $ limit \u003d 100]]])

  • string $ type - Tipo di statistiche. I valori validi sono (reset, malloc, mappe, cache, lastre, elementi, dimensioni). Secondo le specifiche del protocollo Memcached, questi argomenti aggiuntivi sono "soggetti a modifiche per comodità degli sviluppatori".
  • int $ slabid: utilizzato quando il primo parametro è impostato su "cache" definisce il server che verrà utilizzato per il debug.
  • int $ limit - Utilizzato quando il primo parametro è impostato su "cache" limita il numero di voci nel dump.

Memcache :: getVersion ()

Restituisce una stringa - numero di versione del server. Puoi anche usare la funzione memcache_get_version ().

corda Memcache :: getVersion (Void)

Memcache :: setCompressThreshold ()

Fornisce la compressione automatica di valori di grandi dimensioni. Puoi anche usare la funzione memcache_set_compress_threshold ()

Commento:

Questa funzione è stata aggiunta a Memcache nella versione 2.0.0.

bool Memcache :: setCompressThreshold (int $reshold [, float $ min_savings])

  • int $reshold - La lunghezza minima del valore da comprimere automaticamente.
  • float $ min_savings - Specifica il rapporto di compressione. Il valore specificato deve essere compreso tra 0 e 1. Il valore predefinito 0,2 fornisce un risparmio di compressione minimo del 20%.

Memcache :: setServerParams ()

Modifica le impostazioni del server in fase di esecuzione. Puoi anche usare la funzione memcache_set_server_params ().

Restituisce VERO in caso di successo o FALSO in caso di errore.

Commento:

Questa funzione è stata aggiunta a Memcache nella versione 2.0.0.

bool Memcache :: setServerParams (stringa $ host [, int $ port \u003d 11211 [, int $ timeout [, int $ retry_interval \u003d false [, bool $ status [, callable $ failure_callback]]]]]])

  • string $ host - Host memorizzato.
  • int $ port - la porta su cui Memcached ascolta le connessioni.
  • int $ timeout - Limite in secondi per la connessione al demone. Pensaci due volte prima di modificare il valore predefinito di 1 secondo: potresti perdere tutti i vantaggi della memorizzazione nella cache se la connessione impiega troppo tempo.
  • int $ retry_interval - Imposta la frequenza con cui verrà eseguito il polling di un server guasto, il valore predefinito è 15 secondi. L'impostazione di questo parametro su -1 disabilita il tentativo automatico di query.
  • bool $ status - Contrassegna il server come ONLINE. L'impostazione di questo parametro su FALSE e retry_interval -1 consente di archiviare il server guasto nel pool di server attivi in \u200b\u200bmodo da non influire sugli algoritmi di distribuzione delle chiavi. Le chiamate a questo server verranno distribuite tra i restanti server disponibili. Il valore predefinito è TRUE, ovvero il server deve essere considerato ONLINE.
  • callable $ failure_callback - Consente all'utente di specificare una funzione di callback da eseguire quando viene rilevato un errore. La funzione deve accettare due parametri, il nome host e la porta del server guasto.

Questo articolo è un'ambulanza. Una descrizione dettagliata di azioni specifiche che consentono di installare e configurare memcached sul server.

Cominciamo con la definizione.

memcached - software che implementa un servizio per la memorizzazione nella cache dei dati nella memoria ad accesso casuale basato su una tabella hash.

Dati iniziali:

  • Vpsin esecuzione su un sistema operativo Debian;
  • sito esistente, a cui è possibile accedere tramite FTP, SSH.

Cominciamo con l'ultimo paragrafo. Grazie alla risorsa Internet lanciata (o alla sua somiglianza), possiamo scoprire rapidamente e facilmente cosa è installato con noi (forse, tra le altre cose, troveremo memcached). Crea un file chiamato info.php in cui scriviamo:

Eseguiremo il codice contattando all'indirizzo http://example.com/info.php:

Se, tra le altre cose, hai trovato un record simile, allora tutto è in ordine e il lavoro è già stato fatto. Altrimenti, otterremo questo risultato in base ai risultati delle azioni descritte in questa pubblicazione.

Installa Memcached Server

Esegui il comando di installazione

Apt-get install memcached php5-memcache

Stiamo aspettando il completamento dell'installazione. Dopo aver verificato i risultati con il comando netstat

Di conseguenza, otteniamo:

Tcp 0 0 *: 11211 *: * ASCOLTA 13053 / memcached

Come possiamo vedere, per impostazione predefinita memcached per impostazione predefinita è in ascolto sulla porta 11211. Pertanto, tramite questa porta chiunque può connettersi e utilizzare il nostro server memcached. Ci assicureremo, daremo tale diritto solo al nostro server (localhost). Apri il file /etc/memcached.conf dal pannello di controllo o dalla console:

Vi /etc/memcached.conf

Questo file contiene commenti dettagliati. Assicurati di controllarli.

Aggiungi la riga -l 127.0.0.1.

Riavviamo il server memcached con il comando:

/etc/init.d/memcached restart

E ricontrolla:

Netstat -tap | grep memcached

Di conseguenza, dovremmo ottenere qualcosa del genere

Tcp 0 0 localhost.localdo: 11211 *: * ASCOLTA 13092 / memcached

Ora memcached funziona solo sul server locale.

Installazione di Memcache

Elenco dei comandi (la versione di memcache può differire!):

Apt-get install php5-dev libmemcache-dev pecl scarica memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6 / phpize && ./configure --enable-memcache && crea moduli cp / memcache.so / usr / lib / php5 / 20060613 / echo "extension \u003d memcache.so" \u003e\u003e /etc/php5/apache2/php.ini

Riavvia Apache:

Apachectl grazioso

Controlla lo script che abbiamo pubblicato in precedenza all'indirizzo http://example.com/info.php. Ora dobbiamo trovare l'elemento Memcache lì.

Controlla Memcached

Crea un file result.php ed eseguilo.

connect ("localhost", 11211) o exit ("Impossibile connettersi al server Memcached"); $ version \u003d $ memcache-\u003e getVersion (); echo "Versione server": ". $ version."
\\ n "; $ tmp_object \u003d new stdClass; $ tmp_object-\u003e str_attr \u003d" test "; $ tmp_object-\u003e int_attr \u003d 123; $ memcache-\u003e set (" key ", $ tmp_object, false, 10) oppure die (" Non si è scoperto di lasciare una voce in Memcached "); echo" Scriviamo i dati nella cache di Memcached (i dati verranno archiviati per 10 secondi)
\\ n "; $ get_result \u003d $ memcache-\u003e get (" key "); echo" Dati scritti su Memcached:
\\ n "; var_dump ($ get_result);?\u003e

Il risultato della sceneggiatura:

Versione del server: 1.4.13 Scrivere dati nella cache Memcached (i dati verranno archiviati per 10 secondi) Dati scritti su Memcached: oggetto (stdClass) # 3 (2) (["str_attr"] \u003d\u003e string (4) "test" ["int_attr"] \u003d\u003e int (123))

Tutto o quasi? Quindi va tutto bene. In caso contrario, riprovare la procedura.

Oggi ci occuperemo di un meccanismo interessante per la memorizzazione nella cache dei dati: Memcache php. Il lato meraviglioso di memcahe è che possiamo memorizzare qualsiasi cosa, dalle query SQL agli oggetti e qualsiasi altra struttura di dati.

Che cos'è Memcache?

memcache - questa non è una semplice tecnologia o un algoritmo di memorizzazione nella cache; prima di tutto, è un programma server in esecuzione su un server web. Se si utilizzano servizi di hosting, prima di utilizzare memkesh nell'applicazione, è necessario assicurarsi che memcahe sia disponibile. Questo può essere fatto usando la funzione phpinfo ().

Concetto

Dopo aver verificato che il server memcahe è disponibile per l'uso, impariamo a conoscere il concetto di questo meccanismo di memorizzazione nella cache. Il più interessante da usare memcahe php è che tutti i dati memorizzati nella cache sono memorizzati nella RAM del server. Questo principio di archiviazione dei dati, non solo fa risparmiare tempo al processore sulla formazione di questi ancora e ancora, ma aumenta anche notevolmente la velocità di accesso ad essi.

In una versione semplificata, il concetto di memcahe può essere sintetizzato come segue: gli oggetti php utilizzati di frequente vengono memorizzati nella cache e memorizzati nella RAM del server come un insieme di coppie chiave-oggetto, se necessario, gli oggetti precedentemente memorizzati vengono prelevati dalla memoria del server ignorando numerose connessioni al database e ai cicli di verifica. Nel caso in cui l'algoritmo memcahe php non rilevi in \u200b\u200bmemoria l'oggetto richiesto, l'oggetto necessario viene creato nel modo consueto e memorizzato nella cache.

Come lavorare con il server Memcache in PHP

Per lavorare con il server Memcache, abbiamo bisogno di una delle librerie PHP php-memcache o php-memcached.

La scelta di una libreria dipende dalle esigenze individuali dello sviluppatore, per la maggior parte sono molto simili tra loro, con la differenza che php-memcached offre diverse grandi opportunità di lavoro come:

  • Token CAS per chiavi di versioning
  • callback
  • Il metodo getDelayed () consente di ridurre il timeout ritardando la lettura effettiva dei tasti
  • Supporto del protocollo binario
  • Capacità di evitare la serializzazione mediante igbinary

Entrambi i moduli php-memcach e php-memcachednon sono standard per php, ma sono disponibili nel repository PECL.

Se non lavori sul tuo server, ma sul server di hosting, non devi scegliere, tutto sarà già configurato.

Esempio di lavoro

Attirerò immediatamente la tua attenzione sul fatto che questo esempio funzionerà su php-memcach e php-memcached allo stesso modo.

Memcach php utilizza i seguenti metodi per lavorare con i dati:

  1. get - per ottenere un oggetto dalla cache;
  2. set - scrive un oggetto tramite chiave nella cache;
  3. aggiungi: scrivi l'oggetto nella cache, se non ha già una chiave del genere;
  4. sostituisci: scrive l'oggetto nella cache, se la chiave esiste già.

Permettetemi di darvi un esempio primitivo dell'uso della cache usando il server memcache.

1
2
3
4
5
6
7

$ memcache \u003d new Memcache ();
$ memcache -\u003e pconnect ("localhost", 3211); // Collegare. Per impostazione predefinita, è possibile utilizzare qualsiasi porta
$ key \u003d "key_1";
$ value \u003d array (1, 2, 3, 4, 5);
$ scadenza \u003d 600;
$ memcache -\u003e set (tasto $, $ valore, 0, $ scadono); // Salva il valore per 10 minuti
$ memcache -\u003e get ("key_1"); // ottiene l'array precedentemente scritto

Quando si utilizza un server memkesh per più progetti contemporaneamente, ricordare che i dati vengono scritti in una memoria ad accesso casuale. Ciò significa che se si scrivono nuovi valori da diversi progetti utilizzando la stessa chiave, l'ultimo valore presente in memoria sarà disponibile per entrambi.

Come risultato dell'applicazione delle informazioni fornite in questo articolo, è possibile installare e configurare il server Memcached e l'estensione php necessaria per interagire con esso, nonché il servizio di analisi e statistiche phpMemcachedAdmin

L'installazione avverrà in Debian con il server back-end. Se hai un gruppo funzionante + php5-fpm, basta sostituire apache2 con php5-fpm nei comandi
Strumenti di lavoro: un file manager per la connessione con un editor o uno stucco integrati.

Ora diciamo che abbiamo già il sito http://example.com su questo hosting

Innanzitutto, devi determinare come è configurato PHP (Memcached è già installato?)). Per fare ciò, creare temporaneamente il file info.php con il codice nella radice del sito

Ora dai un'occhiata a http://example.com/info.php

Se vediamo che esiste un record simile, allora tutto è in ordine, viene installata l'estensione php necessaria.
In caso contrario, devi lavorare.

Come installare il server memcached

Prima di installare, è necessario aggiornare il repository

Apt-get update && apt-get upgrade

Ora installa memcached e il modulo php sotto di esso

Apt-get install memcached php5-memcache

Installazione in corso. Dopo il suo completamento, controlliamo cosa è successo

Di conseguenza, vedremo qualcosa di simile

Tcp 0 0 *: 11211 *: * ASCOLTA 13053 / memcached

Ora devi riavviare Apache o php-fpm

Riavvio del servizio apache2

Installazione memorizzata

Ora che il server è installato, è necessario modificarlo. Non è difficile e non richiede molto tempo.

Chiudi Memcached dall'accesso esterno

Come puoi vedere, memcached si blocca sulla porta 11211 per impostazione predefinita. Poiché memcached non ha meccanismi di autenticazione integrati, si scopre che chiunque può connettersi dall'esterno e utilizzarlo per i propri scopi. Per evitare ciò, è possibile chiudere la porta 11211 con un firewall o configurare un server memcached in modo che possa essere utilizzato solo dall'host locale. L'ultimo metodo è descritto di seguito.

  1. Aggiungi la riga -l 127.0.0.1
  2. Riavvia memcached

    Riavvio del servizio memorizzato

    /etc/init.d/memcached restart

E ricontrolla

Netstat -tap | grep memcached

Alla fine, dovremmo vedere qualcosa del genere.

Tcp 0 0 localhost.localdo: 11211 *: * ASCOLTA 13092 / memcached

Inoltre, dopo tutte le modifiche, assicurarsi di riavviare Apache

Riavvio del servizio apache2

Aumentiamo la quantità di memoria di lavoro Memcached

Per impostazione predefinita, Memcached utilizza 64 megabyte di RAM. Aumenterò a 1024, vieni dai parametri del tuo server

  1. Aprire il file di configurazione vi /etc/memcached.conf
  2. Trova il valore di -m 64
  3. Modificalo in -m 1024
  4. Riavvia servizio memcached riavvio memcached

Memorizzazione di sessioni PHP in Memcached

Se diversi siti diversi utilizzano lo stesso server o cluster di Memcached, possono intercettare le reciproche sessioni e ottenere l'accesso agli account dei propri utenti, il che rappresenta un potenziale pericolo

È possibile accelerare php spostando l'archiviazione di sessione da hdd a RAM utilizzando memcached

Devi sapere quale estensione php stai usando, memcache o memcached. e puoi chiarire cosa sta succedendo con phpinfo (), ci sono sottigliezze nelle impostazioni, fai attenzione

Metodo per estendere memcache

  1. Apri /etc/php5/mods-available/memcache.ini
  2. Aggiungi session.save_handler \u003d memcache session.save_path \u003d "tcp: //127.0.0.1: 11211"

Metodo per estendere memcacheD

  1. Apri /etc/php5/mods-available/memcached.ini
  2. Aggiungi session.save_handler \u003d memcached session.save_path \u003d "127.0.0.1:11211"
  3. Ricarica il servizio apache apache2 restart

Controllo Phpinfo

Ora dobbiamo controllare cosa abbiamo in uscita. Per fare ciò, apri la pagina con phpinfo () e cerca il codice session.save_path nella colonna con i valori locali. Il valore dovrebbe essere tcp: //127.0.0.1: 11211 o 127.0.0.1:11211 ..conf), ma guarda
php_admin_value session.save_path

A proposito, puoi anche usare la direttiva php_value per configurare non l'intero server a livello globale, ma solo siti specifici. Per fare ciò, puoi modificare .htaccess nella radice del tuo sito

Php_value session.save_handler "memcache" php_value session.save_path "tcp: //127.0.0.1: 11211"

File di configurazione Memcached pronto all'uso

Puoi anche personalizzare tutto in base alle tue esigenze, il file di configurazione contiene commenti dettagliati:

# file di configurazione predefinito memcached # 2003 - Jay Bonci< > # Questo file di configurazione viene letto dallo script start-memcached fornito come # parte della distribuzione Debian GNU / Linux. # Esegui memcached come demone. Questo comando è implicito e non è necessario per l'esecuzione del daemon #. Vedere il README.Debian fornito con questo pacchetto per ulteriori informazioni #. -d # Registra l'output di memcached in / var / log / memcached logfile /var/log/memcached.log # Sii dettagliato # -v # Sii ancora più dettagliato (stampa anche i comandi client) # -vv # Inizia con un limite di 64 megabyte di memoria. È ragionevole, e il demone predefinito # Nota che il demone crescerà fino a questa dimensione, ma non inizia tenendo così tanto # memory # La quantità di memoria in megabyte riservata per la memorizzazione nella cache. Per impostazione predefinita, 64 megabyte. # -m 64 -m 1024 # Porta su cui Memcached si bloccherà, per impostazione predefinita 11211 -p 11211 # Esegue il demone come root. Start-memcached verrà eseguito per impostazione predefinita come root se non è presente alcun comando # -u in questo file di configurazione -u memcache # Specificare l'indirizzo IP su cui ascoltare. L'impostazione predefinita è l'ascolto su tutti gli indirizzi IP # Questo parametro è una delle uniche misure di sicurezza che memcached ha, quindi assicurati che # sia in ascolto su un'interfaccia firewall. -L 127.0.0.1 # Limita il numero di connessioni in entrata simultanee. L'impostazione predefinita del daemon è 1024 # # -c 1024 # Blocca tutta la memoria paginata. Consulta README e la homepage prima di eseguire questo errore # -k # Restituisci quando la memoria è esaurita (anziché rimuovere gli elementi) # -M # Massimizza il file core limite # -r

Installa l'estensione memcache

Di seguito sono riportati i comandi passo-passo con i quali è possibile installare manualmente l'estensione php memcache dalla console

Apt-get install php5-dev libmemcache-dev pecl scarica memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6 / phpize && ./configure --enable-memcache && crea moduli cp / memcache.so / usr / lib / php5 / 20060613 / echo "extension \u003d memcache.so" \u003e\u003e /etc/php5/apache2/php.ini

Riavvia Apache per rendere effettive le modifiche

Riavvio del servizio apache2

Come controllare Memcached

Crea un file memcachetest.php nella radice del sito e scrivi qui il seguente codice

connect ("localhost", 11211) o exit ("Impossibile connettersi al server Memcached"); $ version \u003d $ memcache-\u003e getVersion (); echo "Versione server": ". $ version."
\\ n "; $ tmp_object \u003d new stdClass; $ tmp_object-\u003e str_attr \u003d" test "; $ tmp_object-\u003e int_attr \u003d 123; $ memcache-\u003e set (" key ", $ tmp_object, false, 10) oppure die (" Non si è scoperto di lasciare una voce in Memcached "); echo" Scriviamo i dati nella cache di Memcached (i dati verranno archiviati per 10 secondi)
\\ n "; $ get_result \u003d $ memcache-\u003e get (" key "); echo" Dati scritti su Memcached:
\\ n "; var_dump ($ get_result);?\u003e

Ora resta da controllare i risultati: http://example.com/memcachetest.php
Se tutto è fatto correttamente, vedrai qualcosa di simile

phpMemcachedAdmin - monitoraggio, statistiche e gestione memcached

phpMemcachedAdmin è un software che fornisce un'interfaccia Web per il monitoraggio e la gestione del servizio Memcached su Linux. Consente di visualizzare statistiche in tempo reale per tutte le operazioni supportate dal server: ottenere, impostare, eliminare, incrementare, decrementare, recuperare, sfratti, cas, nonché statistiche del server: rete, posizioni, versione funzionante, insieme a grafici e configurazione interna del server.

Installa e configura phpMemcachedAdmin

Qui puoi andare in diversi modi: seleziona un dominio o sottodominio separato per il lavoro di questo servizio. E puoi creare una sottodirectory nel sito di lavoro e inserire una password o. Descriverò l'ultimo modo con l'impostazione di una password su una cartella come più semplice.

Quindi, supponiamo di avere un sito https: // site

Cd / var / www / site

Crea una directory e vai su di essa

Mkdir phpMemcachedAdmin && cd phpMemcachedAdmin

Scarica l'ultima versione della distribuzione

Wget http://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.tar.gz

Disimballare ed eliminare l'archivio di distribuzione

Tar -xvzf phpMemcachedAdmin-1.2.2-r262.tar.gz && rm -rf phpMemcachedAdmin-1.2.2-r262.tar.gz

Impostare in modo ricorsivo i diritti di accesso richiesti nella directory corrente

Trova ./ -type f -exec chmod 0644 () \\; find ./ -type d -exec chmod 0755 () \\;

AuthType Basic AuthName "Area privata" AuthUserFile .htpasswd Richiedi utente memcachedmanager

Create.htpasswd

Htpasswd -c .htpasswd memcachedmanager

Inserisci la tua password.

È tutto. Accedi alla directory memcachedmanager se non l'hai modificata. Apri https: // site / phpMemcachedAdmin (cambia il dominio nel tuo), inserisci il tuo login / password e usa

Finalmente

Consiglio di leggere l'articolo su memcached. Rivela informazioni generali su di lui e alcune sottigliezze di lavoro.
È tutto. Se qualcosa non è chiaro, fai domande nei commenti

Oggi ti presenterò un piccolo pezzo di codice che ti insegnerà come interagire con Memcache. Per installare Mediatemple su un hosting, sono necessari dati per SSH.

Chi sta usando Memcache?

Memcache è stato sviluppato da Danga Interactive per aumentare la velocità del portale LiveJournal.com. Memcache riduce quasi a zero il tempo di caricamento dal database, aumentando la velocità di caricamento della pagina per gli utenti, accelerando la gestione delle risorse, ecc. FaceBook è attualmente il più grande utente del servizio Memcache. Considerando il numero di persone che arrivano quotidianamente su FaceBook, ha quasi sopraffatto questo servizio e gli è stato assegnato un posto separato.

Che cos'è memcache?

Bene, è diventato interessante? Memcache è un sistema di distribuzione universale per gli oggetti memorizzati nella cache. Se non c'è nulla nella cache, viene effettuata una richiesta al database e i risultati vengono scritti in Memcache:

Memcache offre 5 funzioni:

  • get (): recupera il valore per chiave
  • set () - imposta il valore
  • add () - aggiunge una cache se non esiste
  • replace () - sostituisce la cache
  • flush (): elimina tutti i dati memorizzati nella cache

Codice

Se hai installato Memcache, puoi iniziare a usarlo. Si ritiene che molta cache sia dannosa. Non sono assolutamente d'accordo con questo! Più veloce viene caricato il tuo sito, meglio è!

  • Le prime due linee si collegano a Memcache.
  • Di seguito è riportato uno script di connessione al database.
  • Quindi creiamo una chiave. Quando vogliamo inserire i dati in Memcache, dobbiamo inserire 3 elementi per l'inserimento: chiave, valore e durata della cache. È necessaria una chiave per accedere ai dati. In questo esempio, puoi vedere che sto usando l'hash della richiesta come chiave MD5.
  • Successivamente, controlliamo se la cache esiste. Il controllo ci restituirà vero o falso. Se lo è, abbiamo accesso a lui.
  • Se non c'è cache, ci connettiamo al database e otteniamo i valori. Per creare una cache, utilizzare la seguente espressione: $ memcache-\u003e set ($ chiave, $ riga, VERO, 20); $ row memorizza un array di ciò che abbiamo ottenuto dal database. 20 è la durata della cache in secondi.

$ memcache \u003d new Memcache; $ memcache-\u003e connect ("127.0.0.1", 11211) o die ("Impossibile connettersi"); include ("Includes / connect.php"); // crea una chiave, quindi controlla la cache $ key \u003d md5 ("SELEZIONA * DA memcached_test dove name \u003d" ashley ""); $ get_result \u003d $ memcache\u003e get ($ key); if ($ get_result) (echo $ get_result ["nome"]; echo $ get_result ["nome utente"]; echo "Dati estratti dalla cache";) else (// Ottieni dati dal database e crea la cache $ query \u003d "SELECT * FROM memcached_test dove name \u003d "ashley"; "; $ result \u003d mysql_query ($ query); $ row \u003d mysql_fetch_array ($ result); print_r ($ row); $ memcache\u003e set ($ key, $ row, TRUE, 20) ; // Memorizza il risultato per 20 secondi echo "Dati estratti dal database";)

Questo è l'esempio più semplice di utilizzo di memcache, ma spero sia stato un buon inizio per te.

LA CAMPANA

C'è chi legge questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam