Installare Memcached in un server Apache2

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"
Warning.png ATTENZIONE
Per Debian Stretch o superiori si veda la guida apposita.


Introduzione

Memcached è un sistema di caching distribuito in RAM per oggetti, è molto usato nell'ambito di applicazioni web dinamiche per alleviare il carico sul database, facendo in modo di servire alcuni dei dati ai quali l’accesso è più frequente, direttamente dalla memoria RAM.
Memcached è stato creato nel 2003 dalla compagnia che gestisce LiveJournal, la Danga Interactive, che si trovava a dover gestire più di 20 milioni di richieste dinamiche al giorno in crescita esponenziale. L’adozione di questo innovativo sistema di caching ha permesso di ridurre drasticamente il carico sui server database e migliorare sensibilmente le performance del sito. Oggi sono molti i siti che utilizzano memcached, tra i quali Wikipedia.

Prerequisiti

Per poter seguire questa guida è necessario avere un server Debian correttamente installato, su cui girino i servizi Apache2, PHP5 e MySQL. Per l'installazione di un ambiente LAMP di questo genere si veda ad esempio la guida Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5.

Verifiche preliminari

Controlliamo innanzitutto di avere un ambiente LAMP funzionante, creando una pagina che riepiloghi le informazioni sull'ambiente PHP installato.

  • Fino a Debian Wheezy:
# nano /var/www/phpinfo.php
  • Da Debian Jessie:
# nano /var/www/html/phpinfo.php

Il contenuto di questo file dovrà essere il seguente:

<?php
phpinfo();
?>

Quindi richiamiamo da un browser la pagina:

http://indirizzo.IP.del.server/phpinfo.php

Dovremmo ricevere come risposta una pagina con l'elenco di tutti i moduli PHP abilitati e una serie di informazioni sul nostro sistema.

Installazione

A questo punto siamo pronti per installare memcache:

# apt-get install memcached php5-memcache php-apc

Dopo l'installazione memcache dovrebbe già essere attivo. Lo possiamo verificare con il comando:

# netstat -tap | grep memcached
tcp        0      0 *:11211                 *:*                     LISTEN     3053/memcached

Come si vede dall'output di netstat, memcached è in ascolto sulla porta 11211 (la sua porta di default) e risponde su tutte le interfacce del sistema. Poichè memcached non ha un sistema integrato di autenticazione questo significa che la porta 11211 è aperta a chiunque voglia connettersi, e ciò non è bene.
Per evitare una cosa del genere, possiamo chiudere la posta 11211 sul firewall della nostra rete, oppure riconfigurare memcached e metterlo in ascolto solo su localhost:

# nano /etc/memcached.conf

Aggiungete la dicitura -l 127.0.0.1 alla configurazione di memcached, nella sezione del file indicata qui:

[...]
# Specify which IP address to listen on. The default is to listen on all IP addresses
# This parameter is one of the only security measures that memcached has, so make sure
# it's listening on a firewalled interface.
# -l 12.34.56.78
-l 127.0.0.1
[...]

Quindi riavviate memcached:

/etc/init.d/memcached restart

e lanciate di nuovo:

# netstat -tap | grep memcached
tcp        0      0 localhost.localdo:11211 *:*                     LISTEN     3092/memcached

Come possiamo vedere, adesso memcached è in ascolto solo su localhost.
Riavviamo infine anche Apache per fare in modo che la nostra nuova configurazione PHP diventi attiva:

# /etc/init.d/apache2 restart

Se adesso apriamo di nuovo il browser all'indirizzo:

http://indirizzo.IP.del.server/phpinfo.php

dovremmo vedere tra le altre cose anche le informazioni su memcached.

Configurare PHP

Per fare in modo che la nostra installazione di PHP utilizzi il demone appena installato occorre modificare il file di configurazione di PHP:

# nano /etc/php5/apache2/php.ini

cercando le righe:

session.save_handler = files
;session.save_path =

e modificandole come segue:

session.save_handler = memcache
session.save_path = “tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15″

Utilizzo di memcached nelle applicazioni

Per utilizzare memcached nelle nostre applicazioni PHP ci conviene fare riferimento alla documentazione ufficiale del demone:

Esempio

Come piccolo esempio di utilizzo di memcache possiamo studiare questo script:

# nano /var/www/memcachetest.php

il cui contenuto sarà simile al seguente:

<?php

$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");

$version = $memcache->getVersion();
echo "Server's version: ".$version."<br/>\n";

$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;

$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)<br/>\n";

$get_result = $memcache->get('key');
echo "Data from the cache:<br/>\n";

var_dump($get_result);

?>

Il risultato sarà una pagina PHP che ci comunica la versione di memcache attiva sul server e alcune piccole informazioni.




Guida scritta da: Ferdybassi 00:35, 1 mar 2010 (CET)   Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized