Memcached permette la gestione di una cache condivisa.

Memcached è un software opensource che permette la gestione di una cache condivisa.

L’utilizzo di tale software permette di alleggerire il carico per quanto riguardo il dispositivo che fornisce lo storage dati.

Per esempio nel caso dell’utilizzo di un database, se un software richiede parecchi dati e le query eseguite sono spesso le stesse, sarebbe inutile continuare ad eseguire richieste procedurali al DBMS per reperire i dati, quando si possono facilmente salvare in una cache.

L’utilizzo più comune di Memcached è legato al WEB e l’utilizzo di pagine dinamiche.

Un esempio potrebbe essere quello di un blog: il blog è una pagina internet con aggiornamenti più o meno frequenti che restituisce però, sempre un elenco di post.

memcache1

L’idea è quindi quella di inserire in una cache il contenuto di questi post per sgravare il dbms da continue richieste dello stesso tipo.

Nel caso di blog con una frequenza di aggiornamento di un post al giorno si potrebbe settare il time to live del dato in cache di 24 ore, o, per essere sicuri di non perdere aggiornamenti essenziali, a 12 ore.

Ovviamente si possono applicare algoritmi di controllo per eventuali aggiornamenti come per esempio un controllo sulla data di salvataggio della cache confrontata con la data dell’ultimo aggiornamento della tabella dei post.

Leggi anche:  Metamail ottima utility per integrare il supporto per i tipi MIME.

Vediamo ora un esempio pratico:
$SQL_SERVER = “127.0.0.1”;
$SQL_USER = “user”;
$SQL_PASS = “pass”;
$SQL_DBNAME = “myblog”;
$conn = mysql_connect($SQL_SERVER,$SQL_USER,$SQL_PASS);
mysql_select_db($SQL_DBNAME);

$memcache = new Memcache;

$memcache->connect($MEMCACHED_SERVER, $MEMCACHED_PORT);
if($memcache->get(‘data’)==FALSE)
{
$memcache->set(‘data’,time());
$ISSET_CACHE = FALSE;
}
else
{
$last_update = $memcache->get(‘data’);
$ISSET_CACHE = TRUE;
}

$dati = array();

if($ISSET_CACHE)
{
$sql = “SELECT data FROM blog ORDER BY data DESC LIMIT 1;”;
$res = mysql_query($sql);
$res = mysql_fetch_assoc($res);
if($res[‘data’]>$last_update)
{
$sql = “SELECT title,testo,data FROM blog;”;
$res = mysql_query($sql);
$i=0;
while($row=mysql_fetch_assoc($res))
{
$dati[] = $row;
$memcached->set($i.’_title’,$row[‘title’]);
$memcached->set($i.’_testo’,$row[‘testo’]);
$memcached->set($i.’_data’,$row[‘data’]);
}
$memcached->set(‘count’,$i);
}
else
{
$counter = $memcached->get(‘count’);
for($i=0;$i<$counter;$i++) { $dati[] = array( “title” => $memcached->get($i.’_title’),
“testo” => $memcached->get($i.’_testo’),
“data” => $memcached->get($i.’_data’)
);
}
}
}
else
{
$sql = “SELECT title,testo,data FROM blog;”;
$res = mysql_query($sql);
$i=0;
while($row=mysql_fetch_assoc($res))
{
$dati[] = $row;
$memcached->set($i.’_title’,$row[‘title’]);
$memcached->set($i.’_testo’,$row[‘testo’]);
$memcached->set($i.’_data’,$row[‘data’]);
}
$memcached->set(‘count’,$i);
}

for($i=0;$i</COUNT($DATI);$I++)>

?>

Un altro aspetto interessantissimo di Memcached è l’applicazione di questo servizio per la condivisione del pool di sessioni HTTP nel WEB clustering.

Infatti, con l’apposito modulo PHP, si può configurare come handler di gestione delle sessioni memcached.

Questa configurazione risulta estremamente comoda per mantenere attive le sessioni anche se il Web Server reale che gestisce la connessione cambia.

Infatti il pool delle sessioni risulta condiviso e la scrittura di esse viene effettuata atomicamente garantendo quindi la coerenza dei dati.

Per configurare questo tipo di handler per le sessioni basterà andare a scommentare le righe del file di configurazione del modulo PHP che gestiscono memcached.

Leggi anche:  Guida a Gnuplot programma per il disegno di funzioni matematiche in 2D e 3D: Introduzione.

In particolare nell’ambito Fedora/CentOS i file sono

/etc/php.d/memcache.ini
/etc/php.d/memcached.ini

nei quali andremo a scommentare le seguenti linee:

session.save_handler=memcache
session.save_path=”tcp://localhost:11211″

Ovviamente all’indirizzo localhost e sulla porta 11211 sarà in funzione il demone memcached.

Otterremo così un pool di sessione condiviso rendendo completamente trasparente per l’utente la sua posizione nel cluster.

Screenshots.


Se ti è piaciuto l’articolo , iscriviti al feed cliccando sull’immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

rss-feed-ubuntu_linux-banner

Espero que esta publicación te haya gustado. Si tienes alguna duda, consulta o quieras complementar este post, no dudes en escribir en la zona de comentarios. También puedes visitar Facebook, Twitter, Google+, Linkedin, Telegram y WhatsApp donde encontrarás información complementaria a este blog. COMPARTE EN!
stampa la pagina
Precedente Simple Scanner semplice applicazione per gestire il nostro scanner. Successivo Come costruire un bellissimo album 3D con Cooliris.

Lascia un commento