Start · Sprachen · PHP · Referenz · memcache_get

memcache_get

Funktion

Liest einen oder mehrere Einträge aus dem Memcache-Server anhand des angegebenen Schlüssels.

seit PHP 2.0.0 Kategorie: db

Signatur

memcache_get(Memcache $memcache, string|array $key, array &$flags = null): mixed

Beschreibung

memcache_get() ist die prozedurale Variante der Methode Memcache::get() und liest einen zwischengespeicherten Wert anhand seines Schlüssels vom Memcache-Server. Ist der Schlüssel nicht vorhanden oder abgelaufen, wird false zurückgegeben.

Durch Übergabe eines Arrays von Schlüsseln als zweites Argument können mehrere Werte in einem einzigen Netzwerk-Roundtrip abgerufen werden. Das Ergebnis ist dann ein assoziatives Array mit den gefundenen Schlüssel-Wert-Paaren. Nicht gefundene Schlüssel fehlen im Ergebnis einfach.

Der optionale Parameter $flags wird als Referenz übergeben und enthält nach dem Aufruf Flags (Bit-Werte), die beim Speichern des Eintrags gesetzt wurden, z. B. Informationen zur Komprimierung. In der Praxis wird dieser Parameter selten benötigt.

Hinweis: memcache_get() gehört zur PECL-Extension Memcache (nicht zu verwechseln mit der neueren Memcached-Extension). Für neue Projekte wird die modernere Memcached-Klasse empfohlen.

Parameter

Name Typ Default Beschreibung
$memcache Pflicht Memcache Eine aktive Verbindungsressource vom Typ Memcache, die zuvor mit memcache_connect() oder memcache_pconnect() erstellt wurde.
$key Pflicht string|array Der Schlüssel (String) des zu lesenden Eintrags oder ein Array von Schlüsseln für den Massenlesezugriff. Schlüssel dürfen keine Leerzeichen oder Steuerzeichen enthalten und sollten 250 Zeichen nicht überschreiten.
$flags array null Optionaler Referenzparameter. Nach dem Aufruf enthält er die Flags der gelesenen Einträge (z. B. Komprimierungs-Flags). Bei einem Array-Schlüssel wird ebenfalls ein Array mit den entsprechenden Flags befüllt.

Rückgabewert

Typ
mixed
Beschreibung
Gibt den gespeicherten Wert zurück, wenn der Schlüssel gefunden wurde. Bei einem Array von Schlüsseln wird ein assoziatives Array der gefundenen Einträge zurückgegeben. Wurde der Schlüssel nicht gefunden oder ist der Eintrag abgelaufen, wird false zurückgegeben.

Beispiele

Einzelnen Eintrag aus dem Cache lesen

<?php
// Verbindung zum Memcache-Server herstellen
$memcache = memcache_connect('localhost', 11211);

if (!$memcache) {
    die('Verbindung zum Memcache-Server fehlgeschlagen.');
}

// Einen Wert speichern (Ablaufzeit: 300 Sekunden)
memcache_set($memcache, 'benutzername', 'Max Mustermann', 0, 300);

// Den gespeicherten Wert lesen
$wert = memcache_get($memcache, 'benutzername');

if ($wert !== false) {
    echo 'Gefunden: ' . $wert;
} else {
    echo 'Eintrag nicht im Cache vorhanden.';
}

memcache_close($memcache);
?>
Gefunden: Max Mustermann

Mehrere Einträge auf einmal lesen (Massen-Get)

<?php
$memcache = memcache_connect('localhost', 11211);

// Mehrere Werte speichern
memcache_set($memcache, 'produkt_1', ['name' => 'Tisch', 'preis' => 99.99], 0, 600);
memcache_set($memcache, 'produkt_2', ['name' => 'Stuhl', 'preis' => 49.99], 0, 600);
memcache_set($memcache, 'produkt_3', ['name' => 'Lampe', 'preis' => 29.99], 0, 600);

// Mehrere Einträge in einem Roundtrip lesen
$schluessel = ['produkt_1', 'produkt_2', 'produkt_3', 'produkt_99'];
$ergebnisse = memcache_get($memcache, $schluessel);

foreach ($ergebnisse as $key => $produkt) {
    echo $key . ': ' . $produkt['name'] . ' - ' . $produkt['preis'] . ' EUR' . PHP_EOL;
}

// 'produkt_99' fehlt im Ergebnis, da nicht vorhanden
echo 'Anzahl gefundener Einträge: ' . count($ergebnisse);

memcache_close($memcache);
?>
produkt_1: Tisch - 99.99 EUR produkt_2: Stuhl - 49.99 EUR produkt_3: Lampe - 29.99 EUR Anzahl gefundener Einträge: 3

Cache-aside-Muster: Daten aus Cache oder Datenbank laden

<?php
$memcache = memcache_connect('localhost', 11211);
$userId   = 42;
$cacheKey = 'user_' . $userId;

$benutzer = memcache_get($memcache, $cacheKey);

if ($benutzer === false) {
    // Cache-Miss: Daten aus der Datenbank laden (hier simuliert)
    $benutzer = [
        'id'    => $userId,
        'name'  => 'Erika Musterfrau',
        'email' => 'erika@example.com',
    ];

    // Ergebnis für 10 Minuten cachen
    memcache_set($memcache, $cacheKey, $benutzer, 0, 600);
    echo 'Daten aus der Datenbank geladen und gecacht.' . PHP_EOL;
} else {
    echo 'Daten aus dem Cache geladen.' . PHP_EOL;
}

echo 'Name: ' . $benutzer['name'] . PHP_EOL;
memcache_close($memcache);
?>
Daten aus der Datenbank geladen und gecacht. Name: Erika Musterfrau

// Wichtig · Fallstricke

Rückgabe false nicht missdeuten: false wird sowohl bei einem Cache-Miss als auch bei einem Fehler zurückgegeben. Um zwischen diesen Fällen zu unterscheiden, kann Memcache::getExtendedStats() oder eine explizite Fehlerbehandlung genutzt werden.

Serialisierung: PHP-Objekte und -Arrays werden automatisch serialisiert und deserialisiert. Das bedeutet, dass komplexe Datenstrukturen direkt gespeichert und wieder geladen werden können, ohne manuellen Serialisierungsaufwand.

Veraltete Extension: Die Memcache-PECL-Extension (prozedurale und OOP-API) gilt als veraltet. Für neue Projekte sollte die Memcached-Extension mit Memcached::get() verwendet werden, da sie mehr Features (z. B. CAS-Operationen) und eine aktivere Weiterentwicklung bietet.

Sicherheit: Memcache bietet standardmäßig keine Authentifizierung. Der Server sollte niemals direkt aus dem Internet erreichbar sein. Schlüssel dürfen keine nicht validierten Benutzereingaben ohne Bereinigung enthalten, da ungültige Zeichen zu unerwartetem Verhalten führen können.