Start · Sprachen · PHP · Referenz · memcache_set_compress_threshold

memcache_set_compress_threshold

Funktion

Aktiviert die automatische Komprimierung von Werten ab einer bestimmten Größe im <code>Memcache</code>-Cache.

seit PHP 2.0.0 Kategorie: db

Signatur

memcache_set_compress_threshold(Memcache $memcache, int $threshold, float $min_savings = 0.2): bool

Beschreibung

memcache_set_compress_threshold() konfiguriert den Memcache-Client so, dass Werte, die eine bestimmte Bytegröße ($threshold) überschreiten, automatisch komprimiert werden, bevor sie an den Memcache-Server gesendet werden. Dies reduziert den Speicherbedarf im Cache und kann den Netzwerkdurchsatz bei großen Datenwerten deutlich verbessern.

Der Parameter $min_savings legt die minimale Einsparungsrate fest: Nur wenn die Komprimierung mindestens diesen Anteil des ursprünglichen Datenvolumens einspart, wird der komprimierte Wert tatsächlich gespeichert. Ist die Komprimierung nicht effizient genug, wird der Originalwert unverändert gespeichert.

Diese Funktion ist die prozedurale Variante der objektorientierten Methode Memcache::setCompressThreshold(). Sie wird typischerweise einmalig nach dem Verbindungsaufbau aufgerufen, um das Komprimierungsverhalten global für die Sitzung zu definieren.

Sinnvoll ist der Einsatz vor allem dann, wenn häufig große Datenmengen (z. B. serialisierte Objekte, HTML-Fragmente oder JSON-Strukturen) in den Cache geschrieben werden und Speicher- bzw. Bandbreitenkosten eine Rolle spielen.

Parameter

Name Typ Default Beschreibung
$memcache Pflicht Memcache Eine aktive Memcache-Verbindungsressource, die zuvor mit memcache_connect() oder memcache_pconnect() erstellt wurde.
$threshold Pflicht int Größenschwelle in Byte. Werte, die diese Größe überschreiten, werden automatisch komprimiert, bevor sie gespeichert werden.
$min_savings float 0.2 Minimale Komprimierungsrate als Dezimalwert (z. B. 0.2 entspricht 20 %). Wenn die tatsächliche Einsparung diesen Wert unterschreitet, wird der Wert unkomprimiert gespeichert.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Verbindungsressource oder ungültige Parameter).

Beispiele

Komprimierung für Werte ab 2 KB aktivieren

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

if ($memcache) {
    // Werte ab 2048 Byte automatisch komprimieren, sofern mindestens 20 % eingespart werden
    $result = memcache_set_compress_threshold($memcache, 2048, 0.2);

    if ($result) {
        echo "Komprimierungs-Schwelle erfolgreich gesetzt.\n";
    } else {
        echo "Fehler beim Setzen der Komprimierungs-Schwelle.\n";
    }

    // Großen Wert speichern – wird automatisch komprimiert
    $bigData = str_repeat('Lorem ipsum dolor sit amet. ', 200);
    memcache_set($memcache, 'mein_schluessel', $bigData, 0, 3600);

    $retrieved = memcache_get($memcache, 'mein_schluessel');
    echo "Gespeicherte Bytes (original): " . strlen($bigData) . "\n";
} else {
    echo "Verbindung zu Memcache fehlgeschlagen.\n";
}
?>
Komprimierungs-Schwelle erfolgreich gesetzt. Gespeicherte Bytes (original): 5600

Objektorientierte Variante im Vergleich

<?php
// Äquivalente OOP-Schreibweise
$memcache = new Memcache();
$memcache->connect('localhost', 11211);

// Werte ab 4096 Byte komprimieren, min. 30 % Einsparung erforderlich
$memcache->setCompressThreshold(4096, 0.3);

$data = json_encode(array_fill(0, 500, 'Beispielwert'));
$memcache->set('json_daten', $data, 0, 600);

echo "Datensatz gespeichert (ggf. komprimiert).\n";
?>
Datensatz gespeichert (ggf. komprimiert).

// Wichtig · Fallstricke

Deprecation-Hinweis: Die memcache-Erweiterung (PECL memcache) gilt als veraltet. Für neue Projekte wird empfohlen, die neuere memcached-Erweiterung (PECL memcached) zu verwenden, die ebenfalls Komprimierung unterstützt und aktiv gepflegt wird.

Komprimierungsalgorithmus: Die Memcache-Extension verwendet intern zlib-Komprimierung (DEFLATE). PHP muss daher mit zlib-Unterstützung kompiliert sein, damit die Komprimierung funktioniert.

Randfälle: Sehr kleine Werte oder bereits binär komprimierte Daten (z. B. JPEG-Bilder) profitieren kaum oder gar nicht von der Komprimierung. In solchen Fällen greift der $min_savings-Schwellwert und der Wert wird unkomprimiert gespeichert, was den CPU-Overhead für Komprimierungsversuche minimal hält.