Start · Sprachen · PHP · Referenz · wincache_ucache_set

wincache_ucache_set

Funktion

Fügt eine Variable in den WinCache User-Cache ein oder überschreibt sie, falls sie bereits vorhanden ist.

seit PHP 1.1.0 Kategorie: misc

Signatur

wincache_ucache_set(mixed $key, mixed $value = null, int $ttl = 0): bool

Beschreibung

wincache_ucache_set() speichert einen Wert unter dem angegebenen Schlüssel im WinCache User-Cache. Existiert der Schlüssel bereits, wird der vorhandene Wert überschrieben. Dies unterscheidet wincache_ucache_set() von wincache_ucache_add(), das nur dann erfolgreich ist, wenn der Schlüssel noch nicht im Cache vorhanden ist.

Der Cache ist prozessübergreifend und wird von allen PHP-Worker-Prozessen des IIS (Internet Information Services) gemeinsam genutzt. Er eignet sich hervorragend zum Cachen häufig benötigter Daten wie Datenbankabfrageergebnisse, Konfigurationswerte oder berechneter Ergebnisse, um Laufzeit und Datenbankbelastung zu reduzieren.

Wird als $key ein assoziatives Array übergeben, werden alle darin enthaltenen Schlüssel-Wert-Paare auf einmal gespeichert. Der Parameter $ttl (Time-to-Live) legt in Sekunden fest, wie lange der Eintrag im Cache verbleibt. Bei 0 bleibt er bis zum Ende des Cache-Lebenszyklus (Serverrestart oder Cache-Leerung) erhalten.

Hinweis: WinCache ist ausschließlich auf Windows-Systemen mit IIS verfügbar und daher eine Windows-spezifische Erweiterung für PHP.

Parameter

Name Typ Default Beschreibung
$key Pflicht mixed Schlüssel, unter dem der Wert gespeichert wird. Kann ein string für einen einzelnen Eintrag oder ein assoziatives array (Schlüssel-Wert-Paare) für mehrere Einträge auf einmal sein. Bei einem Array wird $value ignoriert.
$value mixed null Der zu speichernde Wert. Kann jeden PHP-Datentyp annehmen (Skalare, Arrays, Objekte). Wird ignoriert, wenn $key ein Array ist.
$ttl int 0 Time-to-Live in Sekunden. Gibt an, wie lange der Eintrag im Cache verbleibt. Bei 0 verfällt der Eintrag nicht automatisch und bleibt bis zum Neustart des Caches erhalten.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Wert erfolgreich gespeichert wurde, andernfalls false. Wird ein Array als $key übergeben, gibt die Funktion ein Array der Schlüssel zurück, die nicht gespeichert werden konnten — bei vollem Erfolg also ein leeres Array.

Beispiele

Einfachen Wert im User-Cache speichern

<?php
// Einen einfachen String mit einer Lebensdauer von 60 Sekunden cachen
$success = wincache_ucache_set('begruessung', 'Hallo, Welt!', 60);

if ($success) {
    echo 'Wert erfolgreich in den Cache geschrieben.';
} else {
    echo 'Fehler beim Schreiben in den Cache.';
}

// Wert aus dem Cache lesen
$wert = wincache_ucache_get('begruessung');
echo $wert; // Ausgabe: Hallo, Welt!
Wert erfolgreich in den Cache geschrieben. Hallo, Welt!

Mehrere Werte auf einmal mit Array-Schlüssel speichern

<?php
// Mehrere Datenbankwerte auf einmal cachen
$daten = [
    'user_1_name'  => 'Max Mustermann',
    'user_1_email' => 'max@example.com',
    'user_1_rolle' => 'Administrator',
];

$fehlgeschlagen = wincache_ucache_set($daten, null, 300);

if (empty($fehlgeschlagen)) {
    echo 'Alle Werte erfolgreich gespeichert.';
} else {
    echo 'Folgende Schlüssel konnten nicht gespeichert werden: ';
    echo implode(', ', array_keys($fehlgeschlagen));
}

// Einzelnen Wert aus dem Cache abrufen
$name = wincache_ucache_get('user_1_name');
echo PHP_EOL . 'Name: ' . $name;
Alle Werte erfolgreich gespeichert. Name: Max Mustermann

Cache als Datenbankabfrage-Puffer einsetzen

<?php
function getProdukte(PDO $pdo): array {
    $cacheKey = 'produkte_liste';
    $cached = wincache_ucache_get($cacheKey, $erfolg);

    if ($erfolg) {
        // Cache-Treffer: keine Datenbankabfrage nötig
        return $cached;
    }

    // Cache-Miss: Daten aus der Datenbank laden
    $stmt = $pdo->query('SELECT id, name, preis FROM produkte');
    $produkte = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Ergebnis für 120 Sekunden cachen
    wincache_ucache_set($cacheKey, $produkte, 120);

    return $produkte;
}

// Beispielaufruf (setzt gültige $pdo-Verbindung voraus)
// $produkte = getProdukte($pdo);
// var_dump($produkte);

// Wichtig · Fallstricke

Plattformhinweis: WinCache ist ausschließlich auf Windows mit IIS und dem WinCache-PHP-Erweiterungsmodul verfügbar. Auf Linux/Unix-Systemen steht diese Funktion nicht zur Verfügung — dort empfiehlt sich apcu_store() oder memcache/redis als Alternative.

Sicherheit: Gespeicherte Daten sind für alle PHP-Prozesse desselben IIS-Anwendungspools zugänglich. Vermeiden Sie das Cachen sensibler Nutzerdaten (Passwörter, Tokens, persönliche Informationen) ohne angemessene Zugriffssteuerung.

Serialisierung: PHP-Objekte und -Arrays werden intern serialisiert. Achten Sie darauf, dass gespeicherte Objekte nach einem Server-Neustart oder PHP-Update noch korrekt deserialisiert werden können.

Array-Rückgabewert: Wird ein assoziatives Array als $key übergeben, ist der Rückgabewert kein bool, sondern ein Array der fehlgeschlagenen Schlüssel — prüfen Sie in diesem Fall mit empty() statt mit striktem === true.