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.
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.
Vediamo ora un esempio pratico:
Code:
$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
?>
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.
In particolare nell'ambito Fedora/CentOS i file sono
Code:
/etc/php.d/memcached.ini nei quali andremo a scommentare le seguenti linee: Code: 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.
fonte: Codice a Sbarre
Screenshots.
Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog: