Start · Sprachen · PHP · Referenz · apcu_store

apcu_store

Funktion

Speichert eine Variable (oder mehrere via Array) im APCu-Benutzercache mit optionaler Lebenszeit.

seit PHP APCu 4.0.0 Kategorie: misc

Signatur

apcu_store(string|array $key, mixed $value = null, int $ttl = 0): bool|array

Beschreibung

apcu_store() schreibt einen Wert unter einem Schlüssel in den gemeinsamen APCu-Speicher (Shared Memory), der für alle PHP-Prozesse/Anfragen desselben Webservers zugänglich ist. Damit eignet sich die Funktion hervorragend als schneller In-Process-Cache für teure Datenbankabfragen, berechnete Ergebnisse oder Konfigurationsdaten.

Wird als erster Parameter ein assoziatives Array übergeben, speichert apcu_store() alle enthaltenen Schlüssel-Wert-Paare in einem einzigen Aufruf. In diesem Fall ist der zweite Parameter ($value) bedeutungslos. Rückgegeben wird dann ein Array mit den Schlüsseln, für die das Speichern fehlgeschlagen ist.

Der optionale Parameter $ttl (Time-to-Live) gibt an, wie lange der Eintrag in Sekunden im Cache verbleibt. Der Wert 0 bedeutet, dass der Eintrag solange gespeichert bleibt, bis der Cache manuell geleert wird oder der Speicher voll ist und ältere Einträge verdrängt werden.

Im Gegensatz zu apcu_add() überschreibt apcu_store() einen bereits vorhandenen Eintrag mit demselben Schlüssel, ohne Fehler zu melden.

Parameter

Name Typ Default Beschreibung
$key Pflicht string|array Der eindeutige Schlüssel, unter dem der Wert gespeichert wird. Wird ein assoziatives Array übergeben, werden alle Schlüssel-Wert-Paare des Arrays gespeichert.
$value mixed null Der zu speichernde Wert. Kann jeder serialisierbare PHP-Typ sein (int, string, array, Objekt etc.). Wird ignoriert, wenn $key ein Array ist.
$ttl int 0 Time-to-Live in Sekunden. Nach Ablauf dieser Zeit wird der Eintrag aus dem Cache entfernt. 0 bedeutet kein automatischer Ablauf.

Rückgabewert

Typ
bool|array
Beschreibung
Gibt true bei Erfolg oder false bei einem Fehler zurück, wenn ein einzelner Schlüssel gespeichert wurde. Wird ein Array übergeben, gibt die Funktion ein Array mit allen Schlüsseln zurück, für die das Speichern fehlgeschlagen ist (leeres Array bei vollständigem Erfolg).

Beispiele

Einfachen Wert mit TTL cachen

<?php
// Datenbankabfrage-Ergebnis für 5 Minuten cachen
$cacheKey = 'user_list';

$users = apcu_fetch($cacheKey, $success);
if (!$success) {
    // Simuliert eine teure Datenbankabfrage
    $users = ['Alice', 'Bob', 'Charlie'];
    apcu_store($cacheKey, $users, 300); // 300 Sekunden = 5 Minuten
    echo "Daten neu geladen und gecacht.\n";
} else {
    echo "Daten aus Cache geladen.\n";
}

print_r($users);
Daten neu geladen und gecacht. Array ( [0] => Alice [1] => Bob [2] => Charlie )

Mehrere Werte auf einmal speichern

<?php
// Mehrere Konfigurationswerte gleichzeitig speichern
$config = [
    'site_name'    => 'Meine Webseite',
    'max_upload'   => 10485760,
    'maintenance'  => false,
];

$failed = apcu_store($config, null, 600);

if (empty($failed)) {
    echo "Alle Konfigurationswerte erfolgreich gespeichert.\n";
} else {
    echo "Folgende Schlüssel konnten nicht gespeichert werden: ";
    echo implode(', ', $failed) . "\n";
}

// Einzelnen Wert abrufen
echo apcu_fetch('site_name') . "\n";
Alle Konfigurationswerte erfolgreich gespeichert. Meine Webseite

Vorhandenen Eintrag überschreiben

<?php
apcu_store('counter', 1);
echo apcu_fetch('counter') . "\n"; // 1

// apcu_store überschreibt bestehende Einträge (im Gegensatz zu apcu_add)
apcu_store('counter', 99);
echo apcu_fetch('counter') . "\n"; // 99
1 99

// Wichtig · Fallstricke

CLI-Hinweis: APCu ist im CLI-Modus standardmäßig deaktiviert. Um es im CLI zu aktivieren (z. B. für Tests), muss apc.enable_cli=1 in der php.ini gesetzt werden.

Speicherlimit: Ist der APCu-Speicher voll (apc.shm_size), kann apcu_store() fehlschlagen und false zurückgeben. Ein zu kleines Speicherlimit führt zu häufigen Cache-Misses.

Nebenläufigkeit: APCu bietet keine transaktionalen Garantien. Für atomare Lese-Schreib-Operationen (z. B. Zähler) sollte stattdessen apcu_inc() oder apcu_dec() verwendet werden, um Race Conditions zu vermeiden.

Serialisierung: Gespeicherte Werte werden von APCu intern serialisiert. Ressourcen (z. B. Datenbankverbindungen) können nicht gecacht werden.