Installare Memcached in un server Apache2
Versioni Compatibili Tutte le versioni supportate di Debian |
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:
# nano /var/www/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.
--Ferdybassi 00:35, 1 mar 2010 (CET)