Signatur
Beschreibung
memcache_set() ist die prozedurale Variante der Methode Memcache::set() und speichert einen beliebigen PHP-Wert unter einem gegebenen Schlüssel im Memcache-Datenspeicher. Existiert der Schlüssel bereits, wird der vorhandene Eintrag überschrieben. Dies ist der Hauptunterschied zu memcache_add(), das nur dann schreibt, wenn der Schlüssel noch nicht existiert.
Der Parameter $flag kann genutzt werden, um Kompression zu aktivieren (Konstante MEMCACHE_COMPRESSED), was bei großen Datenmengen Speicherplatz spart und die Netzwerklast reduziert. Mit $expire lässt sich eine Ablaufzeit in Sekunden (0–2592000, also max. 30 Tage) oder als Unix-Timestamp angeben, nach der der Eintrag automatisch vom Server gelöscht wird.
Die Funktion ist besonders sinnvoll, wenn häufig abgerufene und selten veränderte Daten (z. B. Datenbankabfragen, HTML-Fragmente oder API-Antworten) zwischengespeichert werden sollen, um die Antwortzeiten einer Webanwendung zu verbessern.
Hinweis: Diese prozedurale Funktion erwartet als ersten Parameter die Memcache-Ressource, die mit memcache_connect() erzeugt wurde. In modernen PHP-Projekten wird in der Regel die objektorientierte Schnittstelle (Memcache- oder Memcached-Klasse) bevorzugt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $memcache Pflicht | Memcache | Die Memcache-Verbindungsressource, die mit memcache_connect() oder memcache_pconnect() erzeugt wurde. |
|
| $key Pflicht | string | Der eindeutige Schlüssel, unter dem der Wert gespeichert wird. Leerzeichen und Steuerzeichen sind nicht erlaubt; die maximale Länge beträgt 250 Zeichen. | |
| $var Pflicht | mixed | Der zu speichernde Wert. Skalare Typen (int, float, string, bool) werden direkt gespeichert; Arrays und Objekte werden automatisch serialisiert. | |
| $flag | int | 0 | Bitmaske für Optionen. Verwende MEMCACHE_COMPRESSED, um den Wert mit zlib zu komprimieren. Mehrere Flags lassen sich per bitweisem ODER kombinieren. |
| $expire | int | 0 | Ablaufzeit in Sekunden (relativ, max. 2592000 = 30 Tage) oder als absoluter Unix-Timestamp. Der Wert 0 bedeutet, dass der Eintrag nicht abläuft (kann aber durch den LRU-Algorithmus des Servers entfernt werden). |
Rückgabewert
true zurück, wenn der Wert erfolgreich gespeichert wurde, und false im Fehlerfall (z. B. wenn der Server nicht erreichbar ist oder der Schlüssel ungültig ist).Beispiele
Einfaches Caching einer Datenbankabfrage
<?php
// Verbindung zum Memcache-Server herstellen
$memcache = memcache_connect('localhost', 11211);
if ($memcache === false) {
die('Verbindung zum Memcache-Server fehlgeschlagen.');
}
$cacheKey = 'user_list';
$cachedData = memcache_get($memcache, $cacheKey);
if ($cachedData === false) {
// Daten aus der Datenbank laden (hier simuliert)
$data = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
];
// Daten für 300 Sekunden (5 Minuten) im Cache speichern
$success = memcache_set($memcache, $cacheKey, $data, 0, 300);
if ($success) {
echo "Daten wurden im Cache gespeichert.\n";
} else {
echo "Fehler beim Speichern im Cache.\n";
}
} else {
echo "Daten aus dem Cache geladen.\n";
print_r($cachedData);
}
Speichern mit Kompression für große Datenmengen
<?php
$memcache = memcache_connect('localhost', 11211);
// Großen Text komprimiert speichern, Ablauf nach 1 Stunde
$largeContent = str_repeat('Lorem ipsum dolor sit amet. ', 1000);
$result = memcache_set(
$memcache,
'large_content',
$largeContent,
MEMCACHE_COMPRESSED,
3600
);
if ($result) {
echo "Komprimierter Inhalt erfolgreich gespeichert.\n";
// Zur Überprüfung abrufen
$retrieved = memcache_get($memcache, 'large_content');
echo 'Länge des abgerufenen Inhalts: ' . strlen($retrieved) . " Zeichen\n";
} else {
echo "Fehler beim Speichern.\n";
}
// Wichtig · Fallstricke
Sicherheit: Memcache bietet standardmäßig keine Authentifizierung oder Verschlüsselung. Stelle sicher, dass der Memcache-Server nicht über das öffentliche Netz erreichbar ist. Speichere keine sensiblen Daten (Passwörter, Tokens) unverschlüsselt im Cache.
Serialisierung: Beim Speichern von Objekten werden diese automatisch serialisiert. Klassen müssen beim Abrufen der Daten bekannt sein (eingebunden sein), damit die Deserialisierung korrekt funktioniert. Unsichere Deserialisierung kann ein Sicherheitsrisiko darstellen.
Deprecation: Die Memcache-Erweiterung gilt als veraltet; für neue Projekte wird die neuere Memcached-Erweiterung mit der Klasse Memcached und der Methode Memcached::set() empfohlen, da sie mehr Features (z. B. konsistentes Hashing, binäres Protokoll) bietet.
Schlüssellänge: Der Schlüssel darf maximal 250 Zeichen lang sein und keine Leerzeichen oder Steuerzeichen enthalten. Zu lange oder ungültige Schlüssel führen zu einem Fehler.