PHP-Daten-Caching mit Memcached in ServBay nutzen
ServBay ist eine leistungsstarke lokale Webentwicklungsumgebung, die sowohl den Hochleistungs-Memcached-Server als auch die zugehörige PHP-Erweiterung vorinstalliert bietet. Damit können Entwickler in PHP-Anwendungen einfach und effizient Daten cachen und so die Anwendungsleistung deutlich steigern.
In diesem Leitfaden erfahren Sie, wie Sie Memcached und die entsprechende PHP-Erweiterung in ServBay prüfen und nutzen.
Einführung in Memcached
Memcached ist ein performantes, verteiltes In-Memory-Objekt-Caching-System. Durch temporäres Ablegen von Daten wie Datenbankabfragen, API-Antworten oder Seitenfragmenten im Arbeitsspeicher reduziert sich die Anzahl der Backend-Zugriffe (wie Datenbankanfragen). Dadurch werden die Antwortzeiten und der Durchsatz dynamischer Webanwendungen erhöht.
Hauptmerkmale
- Hohe Performance: Speicherung im RAM ermöglicht extrem schnelle Lese- und Schreibzugriffe.
- Verteilbarkeit: Ermöglicht den Aufbau eines verteilten Cache-Pools über mehrere Server und ist damit gut skalierbar.
- Einfache Nutzung: Einfache Protokolle, zahlreiche Client-Bibliotheken und unkomplizierte Integration.
- Reduziert Datenbanklast: Entlastet effektiv die Datenbankabfragen, insbesondere bei hoher Zugriffslast.
Unterschied zwischen den PHP-Extensions memcache
und memcached
In PHP existieren zwei gängige Erweiterungen, um mit dem Memcached-Server zu kommunizieren: memcache
und memcached
. Die Namen sind ähnlich, jedoch handelt es sich um verschiedene Erweiterungen mit unterschiedlichen APIs und Funktionen:
memcache
-Extension:- Ältere PHP-Erweiterung.
- Bietet eine prozedurale API (
memcache_connect()
,memcache_set()
usw.). - Funktionalität eher grundlegend, unterstützt einige fortschrittliche Features wie konsistentes Hashing nicht (auch wenn dies von manchen Client-Libraries nachgeliefert wird).
memcached
-Extension:- Moderneres PHP-Extension (basiert auf der libmemcached-Bibliothek).
- Bietet eine objektorientierte API (die
Memcached
-Klasse). - Unterstützt mehr fortgeschrittene Funktionen wie konsistentes Hashing, Binary Protocol, SASL-Authentifizierung, flexible Serialisierung u.v.m.
- Die
memcached
-Extension ist die empfohlene Wahl, da sie funktional umfangreicher ist und aktiv gepflegt wird.
ServBay stellt standardmäßig und bevorzugt die leistungsfähigere memcached
-Erweiterung bereit.
Memcached-Paket und PHP-Erweiterung in ServBay
ServBay integriert nicht nur den Memcached-Server als verwaltbares Paket, sondern installiert und aktiviert die memcached
PHP-Erweiterung für alle unterstützten PHP-Versionen standardmäßig.
Das bedeutet, dass nach der Installation von ServBay in der Regel sowohl der Memcached-Server als auch die PHP-Extension direkt einsatzbereit sind. Zusätzliche Kompilierung oder Konfiguration ist meist unnötig.
Memcached Paketstatus prüfen:
Im ServBay-Hauptfenster oder in der Paketverwaltung finden Sie das Memcached
-Paket; vergewissern Sie sich, dass der Status auf „läuft“ steht. Falls es nicht läuft, starten Sie es bitte.
Laden der memcached
PHP-Extension prüfen:
Um zu prüfen, ob die gewünschte PHP-Version die memcached
-Extension korrekt geladen hat, nutzen Sie am einfachsten die PHP-Funktion phpinfo()
:
Erstellen Sie im Webseiten-Stammverzeichnis von ServBay (Standard:
/Applications/ServBay/www
) eine neue PHP-Datei, zum Beispielinfo.php
.Fügen Sie Folgendes in die Datei ein:
php<?php phpinfo(); ?>
1
2
3Rufen Sie diese Datei im Browser über die lokale Domain auf, die Sie in ServBay konfiguriert haben (z. B.
http://servbay.demo/info.php
).Suchen Sie auf der ausgegebenen
phpinfo
-Seite nach dem Begriff "memcached". Finden Sie einen Abschnitt „memcached“ mit Konfigurations- und Versionsangaben, ist die Extension erfolgreich geladen und einsatzbereit.
Verwendung von Memcached in PHP-Code
Nachdem der Memcached-Server läuft und die memcached
PHP-Extension geladen ist, können Sie innerhalb Ihrer PHP-Applikation mittels der Memcached
-Klasse auf den Cache-Server zugreifen und Caching-Aktionen durchführen.
Standardmäßig läuft der Memcached-Server auf localhost
Port 11211
.
Beispielcode
Folgendes Beispiel zeigt, wie Sie mit der Memcached
-Klasse eine Verbindung zu einem lokalen Memcached-Server aufbauen und Daten speichern bzw. abrufen:
Speichern Sie diesen Code als PHP-Datei im ServBay-Webverzeichnis, z. B. /Applications/ServBay/www/memcached_test.php
:
php
<?php
// Memcached-Server-Information
$memcached_host = 'localhost';
$memcached_port = 11211;
// Erstellen der Memcached-Clientinstanz
$memcached = new Memcached();
// Hinzufügen des Memcached-Servers zum Verbindungs-Pool
// Die Methode addServer() gibt zurück, ob das Hinzufügen erfolgreich war, sagt jedoch nichts über eine tatsächliche Serververbindung aus
if (!$memcached->addServer($memcached_host, $memcached_port)) {
// Achtung: Meist liegt ein Konfigurationsfehler vor, nicht zwingend ein Verbindungsproblem
die("Konnte den Memcached-Server nicht zur Serverliste hinzufügen. Bitte Host- und Port-Konfiguration kontrollieren.");
}
// (Optional, empfohlen) Abruf eines nicht vorhandenen Keys zur Verbindungstestung
// get() liefert false oder ein leeres Array, wenn der Key nicht existiert oder die Verbindung problematisch ist
// Memcached::getResultCode() gibt detaillierten Statuscode zurück
$test_key = 'servbay_memcached_connection_test';
$memcached->get($test_key); // Versuch, einen nicht vorhandenen Key abzurufen
$result_code = $memcached->getResultCode();
if ($result_code !== Memcached::RES_NOTFOUND && $result_code !== Memcached::RES_SUCCESS) {
// Falls nicht RES_NOTFOUND oder RES_SUCCESS, liegt evtl. ein Verbindungsproblem vor
// Hinweis: RES_SUCCESS kann auch für das Abrufen eines leeren Wertes stehen
// Striktere Verbindungstests können komplexer sein oder client-spezifisches Verhalten voraussetzen
// Für die lokale Entwicklung genügt in der Regel ein Erfolg bei addServer und ein fehlerfreier Folgezugriff
echo "Achtung: Möglicherweise besteht ein Problem bei der Verbindung zum Memcached-Server. Result Code: " . $result_code . "<br>";
// In Produktivanwendungen empfiehlt sich eine detailliertere Fehlerbehandlung
} else {
echo "Erfolgreich mit Memcached-Server verbunden ({$memcached_host}:{$memcached_port}).<br>";
}
// --- Cache-Befehle ---
// Zu speichernde Daten
$key = 'user_profile_1234';
$data = [
'id' => 1234,
'username' => 'servbay-demo',
'email' => '[email protected]',
'status' => 'active'
];
$expiration = 3600; // Ablaufzeit in Sekunden (hier: 1 Stunde)
// Daten in Memcached speichern
// set() gibt zurück, ob der Speichervorgang geklappt hat
if ($memcached->set($key, $data, $expiration)) {
echo "Daten wurden erfolgreich unter dem Schlüssel '{$key}' für {$expiration} Sekunden in Memcached gespeichert.<br>";
} else {
echo "Fehler beim Speichern der Daten im Cache!<br>";
// Fehlergrund abrufbar über $memcached->getResultCode()
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Versuch, die Daten aus dem Cache zu laden
echo "Versuche, Daten aus dem Cache abzurufen...<br>";
$cachedData = $memcached->get($key);
if ($cachedData !== false) { // Memcached::get() gibt false zurück, wenn Cache-Miss oder Fehler
echo "Daten erfolgreich aus dem Cache geladen:<br>";
echo "<pre>";
print_r($cachedData);
echo "</pre>";
} else {
echo "Cache Miss oder Fehler beim Abrufen – Schlüssel '{$key}'.<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Beispiel: Verhalten nach Ablaufen der Cache-Zeit (Annahme: Zeit ist vergangen)
// In realen Anwendungen prüfen Sie, ob $cachedData false ist, und laden dann ggf. die Daten aus der Originalquelle (z. B. Datenbank) nach und speichern sie erneut im Cache.
// Beispiel: Löschen von Cache-Daten
/*
echo "Versuche, Cache-Daten zu löschen...<br>";
if ($memcached->delete($key)) {
echo "Daten wurden erfolgreich aus dem Cache gelöscht, Schlüssel '{$key}'.<br>";
} else {
echo "Fehler beim Löschen der Cache-Daten!<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Versuch, die gelöschten Daten erneut abzurufen
echo "Versuche erneut, gelöschte Daten abzurufen...<br>";
$cachedDataAfterDelete = $memcached->get($key);
if ($cachedDataAfterDelete !== false) {
echo "Daten gefunden (Löschvorgang fehlgeschlagen):<br>";
print_r($cachedDataAfterDelete);
} else {
echo "Daten sind erwartungsgemäß nicht mehr im Cache.<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
*/
// Beispiel: Vollständiges Leeren des Caches (Vorsicht!)
/*
echo "Versuche, den gesamten Cache zu leeren...<br>";
if ($memcached->flush()) {
echo "Alle Cache-Daten wurden gelöscht.<br>";
} else {
echo "Fehler beim Leeren des Caches!<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
*/
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Rufen Sie diese Datei über Ihr lokal konfiguriertes ServBay-Projekt im Browser auf. Sie erhalten dann eine Ausgabe zum Verbindungsstatus sowie zum Setzen und Abrufen der Daten.
Hinweise
- Vergewissern Sie sich, dass das Memcached-Paket in ServBay läuft.
- Memcached lauscht standardmäßig auf
127.0.0.1
(bzw.localhost
) am Port11211
. In der Regel ist keine Anpassung nötig. - Falls die PHP-Verbindung fehlschlägt, prüfen Sie bitte sowohl den Status des Memcached-Pakets als auch eventuelle lokale Firewall-Regeln.
- Die Methode
addServer
derMemcached
-Klasse fügt lediglich den Server zur internen Serverliste hinzu. Eine tatsächliche persistent Verbindung oder die Prüfung der Erreichbarkeit geschieht erst mit nachfolgenden Methoden wieget
oderset
. Prüfen Sie den Rückgabewert oder nutzen SiegetResultCode()
, um den Erfolg zu kontrollieren.
Fazit
ServBay bietet Entwicklern einen äußerst komfortablen Einstieg in die Nutzung von Memcached. Dank der Integration von Memcached als Paket und der vorinstallierten sowie standardmäßig aktivierten memcached
PHP-Extension, ist keinerlei aufwendige Installation oder Konfiguration erforderlich. So können Sie ohne Umwege das Potenzial von Memcached in Ihrer lokalen Entwicklungsumgebung ausschöpfen und legen damit das Fundament für leistungsfähige PHP-Anwendungen.