Per offrirti un'esperienza di navigazione sempre migliore, questo sito utilizza cookie propri e di terze parti, partner selezionati. I cookie di terze parti potranno anche essere di profilazione.
Le tue preferenze si applicheranno solo a questo sito web. Puoi modificare le tue preferenze in qualsiasi momento ritornando su questo sito o consultando la nostra informativa sulla riservatezza.
E' possibile rivedere la nostra privacy policy cliccando qui e la nostra cookie policy cliccando qui.
Per modificare le impostazioni dei cookies clicca qui
  • seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Memcached: esempi di utilizzo in PHP

di :: 23 settembre 2020
Memcached: esempi di utilizzo in PHP

In un articolo precedente abbiamo visto come installare e configurare Memcached in una distribuzione Centos8, per essere utilizzato con PHP 7.

Già sappiamo che Memcached è un sistema di caching di oggetti distribuiti che utilizza il key-value per la memorizzazione di dati nella RAM del nostro server. 

Oggi vediamo alcuni esempi di utilizzo di questa tipologia di database NoSQL.

Connessione a Memchaced: approccio OOP

Innanzitutto verifichiamo che la classe Memcache esista... ed esiste se abbiamo correttamente effettuato l'installazione come vista nella lezione precedente.

Scriviamo lo script "connessione.php"

<?php

if(class_exists('Memcache')){
 echo "memcached per PHP abilitata";
}
else 
 echo "memcached per PHP non abilitata";
}

?>

Bene, apriamo il file da browser web, e se la classe è installata possiamo procedere con la connessione al server che gestisce Memcached.

Utilizziamo un approccio OOP cioè orientato agli oggetti.

Nella lezione precedente avevamo installato Memcached sulla stessa macchina dove è localizzato il nostro sito web (quindi in localhost) ed utilizza la porta 11211

Modifichaimo lo script in questo modo

<?php

if(class_exists('Memcache')){
  // echo "memcached per PHP abilitata";
  $cache = new Memcache();
  $cache->connect('localhost',11211);
}
else {
 echo "memcached per PHP non abilitata";
}

?>

Abbiamo instanziato (creato) un oggetto, $cache, di classe Memcache: la connessione è stabilita, e possiamo accedere alle proprietà della classe, che ci consentiranno di memorizzare, recuperare e cancellare i dati.

Se Memcached fosse installato su una macchina differente, è sufficiente indicarne l'ip corretto, ad esempio 192.168.100.30

  $cache->connect('192.168.100.30',11211);

Un altro modo per effettuare la connessione è usare il metodo "addServer"

if (class_exists('Memcache')) {
  $cache = new Memcache();
  $cache->addServer('localhost',11211);
}

Utilizzando questo metodo non ci sarà alcuna connessione attiva finché non proverai a memorizzare o recuperare un valore.

Questo metodo si utilizza anche quando abbiamo installato Memcached su più server e quindi vogliamo collegarci a tutti i server:

if (class_exists('Memcache')) {
  $cache = new Memcache();
  $cache->addServer('localhost',11211);
  $cache->addServer('192.168.100.30',11211);
}

Salvare i dati

Per salvare i dati, utilizziamo la proprietà "set" della classe Memcache, in questo modo

$cache->set($key, $value, $flag, $ttl);

Dove "key" è la chiave e "value" il valore".

"flag" indica se il dato va salvato compresso (con zlib) o meno: se settato a "0" non viene salvato compresso, se settato a "MEMCACHE_COMPRESSED" viene compresso.

"ttl" ("time to live") è il tempo in secondi in cui si desidera che Memcached memorizzi la coppia chiave valore sul server e di default (se non indicato) vale 0 cioè il dato è persistente.

Se vogliamo ad esempio salvare la chiave "nome" con il valore "pippo", per 10 secondi

$key="nome";
$value="pippo";
$ttl="10";

$cache->set($key, $value, 0, $ttl);

Recuperare i dati

Salvata la chiave "nome", vediamo come recuperarla, usando la proprietà "get"

$cache->get($key);

Nel caso in cui non ci sia alcun valore impostato per la chiave, verrà restituito "null"

Eliminare i dati

Per eliminare una chiave/valore, utilizziamo la proprietà "delete"

$cache->delete($key);

Mettiamo tutto assieme in un unico script

<?php

if(class_exists('Memcache')){
  // echo "memcached per PHP abilitata";
  $cache = new Memcache();
  $cache->connect('localhost',11211);
}
else {
 echo "memcached per PHP non abilitata";
 exit;
}

$key="nome";
$value="pippo";
$ttl="10";

echo "Memorizziamo la chiave $key con il valore $value<br />";
$cache->set($key, $value, 0, $ttl);

$result = $cache->get($key);
if($result) {
  echo "Recuperiamo il valore di $key: ";
  echo $cache->get($key);
  echo "<br />";

  echo "Cancelliamo la chiave $key<br />";
  $cache->delete($key);

  if(($cache->get($key)) == null) {echo "La chiave $key non esiste più";}
  else {echo "La chiave $key esiste ancora";}
}
else {
  echo "La chiave $key non esiste";
}

?>

Lanciate lo script e vedrete Memcached in funzione!!

Adesso modifichiamo lo script, inserendo al suo interno uno sleep(12), in modo tale che dopo il salvataggio della chiave, trascorrano 12 secondi prima che l'istruzione successiva venga eseguita: avendo superato i 10 secondi previsti, la chiave verrà eliminata automaticamente.

<?php

if(class_exists('Memcache')){
  // echo "memcached per PHP abilitata";
  $cache = new Memcache();
  $cache->connect('localhost',11211);
}
else {
 echo "memcached per PHP non abilitata";
  exit;
}

$key="nome";
$value="pippo";
$ttl="10";

echo "Memorizziamo la chiave $key con il valore $value<br />";
$cache->set($key, $value, 0, $ttl);

sleep(12);

$result = $cache->get($key);
if($result) {
  echo "Recuperiamo il valore di $key: ";
  echo $cache->get($key);
  echo "<br />";

  echo "Cancelliamo la chiave $key<br />";
  $cache->delete($key);

  if(($cache->get($key)) == null) {echo "La chiave $key non esiste più";}
  else {echo "La chiave $key esiste ancora";}
}
else {
  echo "La chiave $key non esiste";
}

?>

Connessione a Memchaced: approccio procedurale

Invece dell'approccio OOP avremmo potuto usare un approccio procedurale, in questo modo.

Creiamo la connessione

$memcache_obj = memcache_connect('localhost',11211);

Salviamo la coppia chiave valore in questo modo

memcache_set($memcache_obj, $key, $value, 0, 10);

Recuperiamo il valore della chiave

$val=memcache_get($memcache_obj, $key);

Memcached e PHP Session

PHP salva le sessioni su file. E' tuttavia possibile salvarle anche tramite Memcached.

Con questa soluzione un utente (un client) può passare da un server web all’altro senza accorgersi di nulla e mantenendo tutti i dati della propria sessione.

Questo è molto utile, ad esempio, all’interno di un sistema di load balancing, dove ad ogni richiesta il balancer indirizza l’utente sul web server meno carico di lavoro.

Per salvare le sessioni tramite Memached è sufficiente modificare nel file di configurazione php.ini, modificando queste riga (la seconda si presenta commentata)

session.save_handler = files
;session.save_path = "/tmp"

in questo modo

session.save_handler = memcache
session.save_path = "127.0.0.1:11211" 

In poche parole stiamo dicendo a PHP di salvare la sessione non all'interno di un file localizzato sul server nella cartella "tmp", ma su memcache

Potrebbe interessarti

 
 
 
 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

x

ATTENZIONE