Memcached und PHP Memcache

2011-01-30 - kostaki

Ich hinke zwar Jahre hinterher, aber seit ein paar Monaten benutze auch ich memcached zum Cachen von Webinhalten. Memcached ist ein Memory Speicher der Inhalte komplett im Arbeitsspeicher des Servers vorhält und deshalb sehr schnell ist. Das heißt aber auch das nach einem Server Restart oder Neustart des memcached alle Daten aus dem Cache gelöscht sind. Man kann SQL Results speichern, das Session Management darüber abwickeln oder andere Bottleneck Zugriffe cachen. Hier habe ich schon einmal erklärt wie man memcached auf einem Debian System installiert und in diesem Artikel möchte ich auf den Zugriff aus PHP heraus eingehen.

PHP Memcached oder PHP Memcache?

Hat man den memcached installiert, möchte man ihn natürlich auch benutzen. Ein Blick ins PHP Manual zeigt dann aber gleich 2 Lösungswege um aus PHP auf den memcache Deamon zu greifen zu können. Welche ist aber die richtige? Beide sind PECL Extensions, also nicht direkt bei PHP dabei.

PHP Memcache

PHP Memcached

Den aktuellen Stand und die Unterschiede zwischen den Versionen hat Brian Moon in seinem Blog Post PHP and Memcached: The state of things erklärt. Ich habe mich deshalb für die zwar ältere aber stabilere memcache Version entschieden.

$ aptitude install php5-memcache

Zugriff auf den memcached per PHP

Hat man memcache und memcached installiert, möchte man natürlich auch darauf zugreifen. Das macht man am besten über eine eigene wrapper Klasse um einen zentralen Punkt für Anpassungen und Erweiterungen zu haben. Wer keine eigene schreiben möchte, kann meine PHP5 singleton Wrapper Klasse benutzen Download. Sie unterstützt nur die Standardfunktionen set, get, delete, sowie connect und close.

require_once('class.kmemcache.php');

//speichert $wert mit dem $name
//der Wert soll nach 11 Sekunden expiren
kmemcache::set($name, $wert, 11);

//auslesen von $name
$wert = kmemcache::get($name);

//löschen von $name
kmemcache::delete($name);

Die set/get Befehle setzt man nun um seine zu cachenden Abfragen und fertig ist die memcached Einbindung.

require_once('class.kmemcache.php');

$name = 'langermysqlquery';
if( ($result = kmemcache::get($name) ) === FALSE )
{
   //sql query ausführen
   $result = '';
   
   //result in memcache speichern für 1 Tag
   kmemcache::set($name, $result, 86400);
}

One Response to “Memcached und PHP Memcache”

  • danke für die kurz und überschaubare erklärung, werd es gleich mal durch testen….

Leave a Reply