Start · Sprachen · PHP · Referenz · memcache_set

memcache_set

Funktion

Speichert einen Wert unter dem angegebenen Schlüssel auf einem Memcache-Server.

seit PHP 4.3.3 Kategorie: db

Signatur

memcache_set(Memcache $memcache, string $key, mixed $var, int $flag = 0, int $expire = 0): bool

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

Typ
bool
Beschreibung
Gibt 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);
}
Daten wurden im Cache gespeichert.

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";
}
Komprimierter Inhalt erfolgreich gespeichert. Länge des abgerufenen Inhalts: 28000 Zeichen

// 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.