PHP
nascondiglio
Ricerca…
Osservazioni
Memorizzazione nella cache mediante memcache
Memcache è un sistema di caching di oggetti distribuiti e utilizza il key-value
per la memorizzazione di piccoli dati. Prima di iniziare a chiamare il codice Memcache
in PHP, è necessario assicurarsi che sia installato. Questo può essere fatto usando il metodo class_exists
in php. Una volta convalidato che il modulo è installato, si inizia con la connessione all'istanza del server memcache.
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
}else {
print "Not connected to cache server";
}
Questo convaliderà che i driver php di Memcache sono installati e si connettono all'istanza del server memcache in esecuzione su localhost.
Memcache funziona come demone e si chiama memcached
Nell'esempio sopra abbiamo collegato solo a una singola istanza, ma puoi anche connetterti a più server utilizzando
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->addServer('192.168.0.100',11211);
$cache->addServer('192.168.0.101',11211);
}
Nota che in questo caso, a differenza della connessione, non ci sarà alcuna connessione attiva finché non proverai a memorizzare o recuperare un valore.
Nella memorizzazione nella cache ci sono tre operazioni importanti che devono essere implementate
- Memorizza i dati: aggiungi nuovi dati al server memcached
- Ottieni dati: recupera i dati dal server memcached
- Elimina dati: cancella i dati già esistenti dal server memcached
Immagazzina dati
$cache
o memcached oggetto di classe ha un metodo set
che accetta una chiave, valore e tempo per salvare il valore per (ttl).
$cache->set($key, $value, 0, $ttl);
Qui $ ttl o time to live è il tempo in secondi in cui si desidera che memcache memorizzi la coppia sul server.
Ottieni dati
$cache
o memcached oggetto di classe ha un metodo get
che accetta una chiave e restituisce il valore corrispondente.
$value = $cache->get($key);
Nel caso in cui non ci sia alcun valore impostato per la chiave, restituirà null
Elimina dati
A volte potresti aver bisogno di cancellare qualche valore di cache. $cache
istanza $cache
o memcache ha un metodo di delete
che può essere utilizzato per lo stesso.
$cache->delete($key);
Piccolo scenario per il caching
Supponiamo un semplice blog. Avrà più post sulla pagina di destinazione che verranno recuperati dal database con ogni caricamento della pagina. Per ridurre le query SQL possiamo usare memcached per memorizzare i post nella cache. Ecco un'implementazione molto piccola
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
if(($data = $cache->get('posts')) != null) {
// Cache hit
// Render from cache
} else {
// Cache miss
// Query database and save results to database
// Assuming $posts is array of posts retrieved from database
$cache->set('posts', $posts,0,$ttl);
}
}else {
die("Error while connecting to cache server");
}
Cache usando APC Cache
L'alternativa PHP Cache (APC) è una cache di opcode libera e aperta per PHP. Il suo obiettivo è fornire un framework libero, aperto e robusto per la memorizzazione nella cache e l'ottimizzazione del codice intermedio PHP.
sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart
Aggiungi cache:
apc_add ($key, $value , $ttl);
$key = unique cache key
$value = cache value
$ttl = Time To Live;
Elimina cache:
apc_delete($key);
Imposta esempio di cache:
if (apc_exists($key)) {
echo "Key exists: ";
echo apc_fetch($key);
} else {
echo "Key does not exist";
apc_add ($key, $value , $ttl);
}
APC è quasi 5 volte più veloce di Memcached.