Start · Sprachen · PHP · Referenz · memcache_pconnect

memcache_pconnect

Funktion

Öffnet eine dauerhafte (persistente) Verbindung zu einem Memcached-Server und gibt ein <code>Memcache</code>-Objekt zurück.

seit PHP 2.0.0 Kategorie: db

Signatur

memcache_pconnect(string $host, int $port = 11211, int $timeout = 1): Memcache|false

Beschreibung

memcache_pconnect() stellt eine persistente Verbindung zu einem Memcached-Server her. Im Gegensatz zu memcache_connect() wird die Verbindung am Ende des PHP-Skripts nicht geschlossen, sondern für nachfolgende Anfragen wiederverwendet. Dies reduziert den Overhead durch wiederholten Verbindungsaufbau und verbessert die Performance in Anwendungen mit hohem Caching-Bedarf.

Die Funktion ist die prozedurale Entsprechung zur Methode Memcache::pconnect() der Memcache-Klasse. Bei Verwendung der PECL-Memcache-Erweiterung kann diese Funktion direkt aufgerufen werden, ohne zuvor ein Objekt zu instanziieren.

Persistente Verbindungen sind besonders sinnvoll in Umgebungen mit vielen kurzen PHP-Anfragen (z. B. Webserver mit FastCGI oder PHP-FPM), da dieselbe TCP-Verbindung über mehrere Request-Zyklen hinweg offengehalten wird. Wichtig: Die Verbindung wird pro Prozess gespeichert, nicht global über alle Worker-Prozesse hinweg.

Schlägt die Verbindung fehl, gibt die Funktion false zurück. Eine Fehlerbehandlung ist daher unbedingt empfehlenswert, um Laufzeitfehler in der Anwendung zu vermeiden.

Parameter

Name Typ Default Beschreibung
$host Pflicht string Hostname oder IP-Adresse des Memcached-Servers. Für Unix-Socket-Verbindungen kann hier der Pfad zum Socket angegeben werden (z. B. unix:///tmp/memcached.sock).
$port int 11211 Port, auf dem der Memcached-Server lauscht. Bei Unix-Socket-Verbindungen muss dieser Wert auf 0 gesetzt werden.
$timeout int 1 Verbindungs-Timeout in Sekunden. Ein zu großer Wert kann die Anwendung bei nicht erreichbarem Server merklich verlangsamen.

Rückgabewert

Typ
Memcache|false
Beschreibung
Gibt bei Erfolg ein Memcache-Objekt zurück, das für weitere Operationen (Lesen, Schreiben, Löschen) verwendet werden kann. Bei einem Verbindungsfehler wird false zurückgegeben.

Beispiele

Einfache persistente Verbindung mit Fehlerbehandlung

<?php
$memcache = memcache_pconnect('127.0.0.1', 11211);

if ($memcache === false) {
    die('Verbindung zum Memcached-Server fehlgeschlagen.');
}

// Wert speichern (60 Sekunden TTL)
memcache_set($memcache, 'begruessung', 'Hallo Welt!', 0, 60);

// Wert abrufen
$wert = memcache_get($memcache, 'begruessung');
echo $wert; // Gibt "Hallo Welt!" aus
Hallo Welt!

Persistente Verbindung in einer Caching-Hilfsklasse

<?php
class Cache
{
    private $memcache;

    public function __construct(string $host = '127.0.0.1', int $port = 11211)
    {
        $this->memcache = memcache_pconnect($host, $port);
        if ($this->memcache === false) {
            throw new RuntimeException('Memcache nicht erreichbar: ' . $host . ':' . $port);
        }
    }

    public function get(string $key): mixed
    {
        return memcache_get($this->memcache, $key);
    }

    public function set(string $key, mixed $value, int $ttl = 300): bool
    {
        return memcache_set($this->memcache, $key, $value, 0, $ttl);
    }
}

try {
    $cache = new Cache('127.0.0.1', 11211);
    $cache->set('user_42', ['name' => 'Max Mustermann', 'alter' => 30], 120);
    $user = $cache->get('user_42');
    echo $user['name'];
} catch (RuntimeException $e) {
    echo 'Fehler: ' . $e->getMessage();
}
Max Mustermann

// Wichtig · Fallstricke

Deprecation-Hinweis: Die PECL-Erweiterung memcache (und damit memcache_pconnect()) gilt als veraltet. Für neue Projekte wird die Verwendung der neueren memcached-Erweiterung mit der Klasse Memcached empfohlen, die mehr Funktionen und bessere Stabilität bietet.

Persistenz-Verhalten: Die Verbindung bleibt nur innerhalb desselben PHP-Prozesses persistent. Bei PHP-FPM mit mehreren Worker-Prozessen hält jeder Worker seine eigene persistente Verbindung. Dies kann bei vielen Workern zu einer großen Anzahl offener Verbindungen am Memcached-Server führen.

Timeouts: Der Standard-Timeout von 1 Sekunde ist für die meisten Anwendungen ausreichend. In Produktionsumgebungen sollte ein zu hoher Timeout-Wert vermieden werden, da ein nicht erreichbarer Memcached-Server sonst die gesamte Anwendung blockieren kann.