Signatur
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
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
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();
}
// 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.