Start · Sprachen · PHP · Referenz · memcache_set_server_params

memcache_set_server_params

Funktion

Ändert zur Laufzeit die Verbindungsparameter und den Status eines bereits in einem <code>Memcache</code>-Objekt registrierten Servers.

seit PHP 2.1.0 Kategorie: db

Signatur

memcache_set_server_params(Memcache $memcache, string $host, int $port = 11211, int $timeout = 1, int $retry_interval = 15, bool $status = true, callable $failure_callback = null): bool

Beschreibung

memcache_set_server_params() ermöglicht es, die Konfigurationsparameter eines vorhandenen Memcache-Servers nachträglich anzupassen, ohne den Server komplett neu hinzuzufügen. Dies ist nützlich, wenn sich Netzwerktopologien ändern oder ein Server vorübergehend deaktiviert werden soll, ohne die bestehende Verbindungsinfrastruktur zu verwerfen.

Die Funktion erlaubt es insbesondere, einen Server als inaktiv ($status = false) zu markieren, sodass er bei Anfragen übersprungen wird, oder ihn wieder zu aktivieren. Darüber hinaus können Timeout-Werte und das Wiederholungsintervall bei Verbindungsfehlern angepasst werden.

Als prozedurale Entsprechung zur Methode Memcache::setServerParams() eignet sie sich für Code, der auf dem prozeduralen API-Stil basiert. Die Funktion gehört zur PECL-Erweiterung memcache (nicht zu verwechseln mit memcached).

  • Verwende $status = false, um einen Server temporär aus der Rotation zu entfernen.
  • Mit $failure_callback kann eine eigene Fehlerbehandlung registriert werden, die aufgerufen wird, wenn ein Server nicht erreichbar ist.

Parameter

Name Typ Default Beschreibung
$memcache Pflicht Memcache Das Memcache-Verbindungsobjekt, das den zu ändernden Server enthält.
$host Pflicht string Hostname oder IP-Adresse des Servers, dessen Parameter geändert werden sollen. Muss einem bereits registrierten Server entsprechen.
$port int 11211 Port des Servers. Muss dem Port entsprechen, unter dem der Server registriert wurde.
$timeout int 1 Verbindungs-Timeout in Sekunden. Niedrige Werte vermeiden lange Wartezeiten bei nicht erreichbaren Servern.
$retry_interval int 15 Zeitabstand in Sekunden, nach dem ein als ausgefallen markierter Server erneut kontaktiert wird. Der Wert -1 deaktiviert automatische Wiederholungsversuche.
$status bool true Gibt an, ob der Server als online (true) oder offline (false) betrachtet wird. Ein auf false gesetzter Server wird bei Anfragen übersprungen.
$failure_callback callable null Optionale Callback-Funktion, die bei einem Verbindungsfehler aufgerufen wird. Sie erhält Host und Port als Argumente: function(string $host, int $port): void.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false wenn der angegebene Server im Objekt nicht gefunden wurde oder ein anderer Fehler aufgetreten ist.

Beispiele

Server temporär deaktivieren und später wieder aktivieren

<?php
$memcache = new Memcache();
$memcache->addServer('cache1.example.com', 11211);
$memcache->addServer('cache2.example.com', 11211);

// cache1 wird für Wartungsarbeiten deaktiviert
$result = memcache_set_server_params(
    $memcache,
    'cache1.example.com',
    11211,
    1,
    15,
    false, // Server als offline markieren
    function(string $host, int $port): void {
        error_log("Memcache-Server nicht erreichbar: {$host}:{$port}");
    }
);

if ($result) {
    echo "Server cache1 wurde erfolgreich deaktiviert.\n";
} else {
    echo "Fehler beim Ändern der Serverparameter.\n";
}

// Später: Server wieder aktivieren
memcache_set_server_params($memcache, 'cache1.example.com', 11211, 1, 15, true);
echo "Server cache1 ist wieder aktiv.\n";
Server cache1 wurde erfolgreich deaktiviert. Server cache1 ist wieder aktiv.

Timeout und Retry-Intervall eines Servers anpassen

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

// Timeout auf 2 Sekunden erhöhen, Retry-Intervall auf 30 Sekunden setzen
$success = memcache_set_server_params(
    $memcache,
    'localhost',
    11211,
    2,   // timeout
    30,  // retry_interval
    true // server bleibt aktiv
);

echo $success ? "Parameter erfolgreich aktualisiert." : "Aktualisierung fehlgeschlagen.";
Parameter erfolgreich aktualisiert.

// Wichtig · Fallstricke

Deprecation-Hinweis: Die PECL-Erweiterung memcache wird nicht mehr aktiv weiterentwickelt. Für neue Projekte wird die modernere Erweiterung memcached (mit d) empfohlen, die mehr Features und eine aktivere Pflege bietet.

Achtung: Der angegebene $host und $port müssen exakt mit den Werten übereinstimmen, die beim Hinzufügen des Servers (z. B. via addServer()) verwendet wurden. Andernfalls schlägt die Funktion lautlos fehl und gibt false zurück.

Bei Verwendung von $retry_interval = -1 werden ausgefallene Server dauerhaft aus der Rotation ausgeschlossen und erst nach einem expliziten Aufruf von memcache_set_server_params() wieder verwendet.