Signatur
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
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!
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;
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.