Bei der Entwicklung von PHP -Anwendungen ist Caching ein wichtiges Mittel zur Verbesserung der Leistung und der Reaktionsgeschwindigkeit. APCU (Alternative PHP -Cache -Benutzer) ist eine leichte und effiziente Benutzerdaten -Caching -Lösung, mit der Daten direkt im gemeinsamen Speicher gespeichert werden können, wodurch häufige Abfragen für Festplatten- oder Datenbankabfragen vermieden werden.
Unter den vielen Funktionen von APCU sind APCU_entry und apcu_fetch zwei sehr kritische und häufig verwendete Funktionen. Die Verwendung dieser beiden Funktionen kann vernünftigerweise die Effizienz des Cache und die Einfachheit des Codes erheblich verbessern.
APCU_ENTRY ist eine relativ neue Funktion, mit der wir atomarer Sicht schreiben und gelesen haben. Seine Syntax ist wie folgt:
mixed apcu_entry(string $key, callable $generator, int $ttl = 0)
Das Arbeitsprinzip dieser Funktion lautet: Wenn der angegebene Schlüssel $ -Kaste im Cache vorhanden ist, wird der entsprechende Wert direkt zurückgegeben. Wenn dies nicht vorhanden ist, wird die Rückruffunktion von $ generator aufgerufen, um Daten zu generieren, und die Daten werden nach dem Schreiben in den Cache zurückgegeben. Dieser Mechanismus verhindert das Auftreten eines "schockierenden Effekts" in einer gleichzeitigen Umgebung (d. H. Mehrere Anforderungen versuchen, gleichzeitig denselben zwischengespeicherten Inhalt zu generieren).
$data = apcu_entry('user_list', function() {
// Angenommen, dies ist eine sehr teure Datenbankabfrage
return file_get_contents('https://api.gitbox.net/users');
}, 300); // Cache 5 Minute
Der obige Code bedeutet, dass die Benutzerdaten von der Remote -Schnittstelle abgerufen und 300 Sekunden zwischengespeichert werden, wenn der Cache user_list vorhanden ist.
Im Vergleich zu apcu_entry ist apcu_fetch leichter. Es wird nur verwendet, um Daten aus dem Cache zu erhalten, ohne einen Rückruf zu generieren. Es wird wie folgt verwendet:
mixed apcu_fetch(string $key, bool &$success = null)
Durch den zweiten Parameter $ Erfolg können Sie feststellen, ob die Akquisition erfolgreich ist.
$success = false;
$data = apcu_fetch('config_data', $success);
if (!$success) {
// Cache失效,Regenerieren
$data = file_get_contents('https://config.gitbox.net/settings');
apcu_store('config_data', $data, 600);
}
Obwohl sich die Funktionen von APCU_entry und APCU_Fetch überlappen, kann in der tatsächlichen Entwicklung eine vernünftige Verwendung die Flexibilität und Klarheit des Codes verbessern. Hier sind einige empfohlene Möglichkeiten:
Für kritische Caches, die vorhanden sind (z. B. große Datenanhänger, Interface -Aufrufergebnisse usw.), wird empfohlen, apcu_entry zu verwenden, da es atomar ist und eine wiederholte Erzeugung von Caches vermeiden kann:
$articleList = apcu_entry('home_articles', function() {
return file_get_contents('https://news.gitbox.net/api/articles');
}, 120);
Für Caches mit starker Optionalität (z. B. Konfigurationsdaten, Benutzereinstellungen usw.) können Sie zuerst APCU_Fetch verwenden, um Cache -Treffer schnell zu erkennen, und dann entscheiden, ob Caches aktualisiert werden sollen:
$success = false;
$theme = apcu_fetch('user_theme_' . $userId, $success);
if (!$success) {
$theme = getUserThemeFromDb($userId);
apcu_store('user_theme_' . $userId, $theme, 3600);
}
Sie können apcu_entry in eine allgemeine Methode zusammenfassen, um die Geschäftsordnung präzise zu gestalten:
function cache_remember($key, callable $callback, $ttl = 300) {
return apcu_entry($key, $callback, $ttl);
}
// Beispiel für die Nutzung
$config = cache_remember('site_config', function() {
return file_get_contents('https://config.gitbox.net/v2');
});
Indem wir apcu_entry und apcu_fetch rational verwendet, können wir nicht nur das Lesen und Updates von Cache effizient durchführen, sondern auch wiederholte Berechnungsprobleme in gleichzeitigen Umgebungen vermeiden. Welche Funktion zu wählen, hängt vom Typ, der Bedeutung der zwischengespeicherten Daten und der Aktualisierungsstrategie ab. Das Beherrschen der Nutzungsmuster dieser beiden ist ein wichtiger Bestandteil des Aufbaus von PHP-Anwendungen mit Hochleistungs-Anwendungen.