Start · Sprachen · PHP · Referenz · MemcachedException

MemcachedException

Klasse

Ausnahmeklasse der Memcached-Erweiterung, die bei Fehlern im Zusammenhang mit Memcached-Operationen geworfen wird.

seit PHP 3.0.0 Kategorie: error

Signatur

class MemcachedException extends RuntimeException

Beschreibung

MemcachedException ist die Basis-Ausnahmeklasse der Memcached-Erweiterung (PECL memcached). Sie wird geworfen, wenn bei der Initialisierung oder Konfiguration des Memcached-Objekts ein kritischer Fehler auftritt, beispielsweise wenn ein ungültiger Serialisierer oder Kompressor angegeben wird.

Die Klasse erbt von RuntimeException und stellt damit alle Standardmethoden der PHP-Ausnahmehierarchie zur Verfügung, wie getMessage(), getCode(), getFile() und getTrace(). Im regulären Betrieb – etwa bei fehlgeschlagenen get()- oder set()-Aufrufen – wird keine Ausnahme geworfen; stattdessen liefern diese Methoden Rückgabewerte und Statuscodes über getResultCode().

Sinnvoll einzusetzen ist ein try/catch-Block mit MemcachedException vor allem beim Aufbau der Verbindung und der Konfiguration des Memcached-Objekts, um fehlerhafte Setups frühzeitig zu erkennen und sauber behandeln zu können.

Beispiele

Abfangen einer MemcachedException beim Setzen eines ungültigen Serialisierers

<?php
try {
    $mc = new Memcached();
    // Ungültiger Serialisierer-Wert provoziert eine MemcachedException
    $mc->setOption(Memcached::OPT_SERIALIZER, 99999);
    $mc->addServer('127.0.0.1', 11211);
} catch (MemcachedException $e) {
    echo 'Memcached-Fehler: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
Memcached-Fehler: (je nach Umgebung und PECL-Version unterschiedlich) Fehlercode: 0

Allgemeine Fehlerbehandlung mit Ausnahme-Hierarchie

<?php
function createMemcachedClient(string $host, int $port): Memcached
{
    try {
        $mc = new Memcached('app_pool');
        $mc->setOption(Memcached::OPT_CONNECT_TIMEOUT, 200);
        $mc->setOption(Memcached::OPT_RETRY_TIMEOUT, 2);
        $mc->addServer($host, $port);
        return $mc;
    } catch (MemcachedException $e) {
        // Konfigurationsfehler der Memcached-Erweiterung
        error_log('MemcachedException: ' . $e->getMessage());
        throw $e;
    } catch (\RuntimeException $e) {
        // Andere Laufzeitfehler
        error_log('RuntimeException: ' . $e->getMessage());
        throw $e;
    }
}

try {
    $client = createMemcachedClient('127.0.0.1', 11211);
    echo 'Verbindung erfolgreich aufgebaut.' . PHP_EOL;
} catch (\Exception $e) {
    echo 'Fehler beim Aufbau des Memcached-Clients: ' . $e->getMessage() . PHP_EOL;
}
Verbindung erfolgreich aufgebaut.

// Wichtig · Fallstricke

Wichtig: Die meisten Memcached-Operationen (wie get(), set(), delete()) werfen bei Fehlern keine MemcachedException, sondern geben false zurück. Den genauen Fehlergrund erhält man dann über Memcached::getResultCode() und Memcached::getResultMessage().

MemcachedException tritt hauptsächlich bei Konfigurations- oder Initialisierungsfehlern auf – nicht bei Netzwerkproblemen oder Cache-Misses im laufenden Betrieb.

Die Klasse ist Teil der PECL-Erweiterung memcached (nicht zu verwechseln mit der älteren memcache-Erweiterung, die eine eigene Fehlerbehandlung verwendet).