Was bedeutet "keys_zone = myCache: 8m"?
Wie bereits in der Dokumentation erwähnt , speichert nginx alle aktiven Schlüssel und Dateninformationen in einer gemeinsam genutzten Speicherzone, deren name
und size
durch den Parameter keys_zone konfiguriert werden. Lassen Sie uns der Vollständigkeit halber nach Teilen aufschlüsseln
/var/cache/nginx
ist der Ort, an dem der eigentliche Cache gespeichert ist. Innerhalb des Ordners war die Cache-Datei eine Binärdatei, aber Sie können das HTML-Tag darin leicht erkennen.
levels=1:2
Der Parameter is levels legt die Anzahl der Unterverzeichnisebenen im Cache fest.
keys_zone=myCache:8m
definierte die Shared Memory Zone myCache mit einer maximalen Größe von 8 MB. Es enthält alle aktiven Schlüssel und Metadaten des Caches. Wenn nginx also prüft, ob eine Seite zwischengespeichert wurde, durchsucht es zuerst die Shared-Memory-Zone und sucht dann nach dem Ort des tatsächlichen Caches, in dem sich der Cache befindet, /var/cache/nginx
falls vorhanden.
max_size
war die maximale Größe des Caches, zB die Dateigröße /var/cache/nginx
.
inactive=1h
Angabe der maximalen inaktiven Zeit, in der der Cache gespeichert werden kann. Zwischengespeicherte Daten, auf die während der vom inactive
Parameter angegebenen Zeit nicht zugegriffen wird, werden unabhängig von ihrer Aktualität aus dem Cache entfernt.
So funktioniert die Überprüfung und Löschung des Caches
Entnommen aus Nginx-Mailinglisten
Die Direktive proxy_cache_valid gibt an, wie lange eine Antwort als gültig betrachtet wird (und ohne Anforderungen an das Backend zurückgegeben wird). Nach dieser Zeit gilt die Antwort als "veraltet" und wird entweder nicht zurückgegeben oder hängt von der proxy_cache_use_stale- Einstellung ab.
Argument inaktiv von proxy_cache_path gibt an, wie lange Antwort wird im Cache nach dem letzten Gebrauch gespeichert werden. Beachten Sie, dass selbst veraltete Antworten als kürzlich verwendet betrachtet werden, wenn sie angefordert werden.
Soweit ich weiß, hier der Pseudocode, wie Nginx funktioniert
Wenn die Anfrage kommt
if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
use it
else:
retrieve from backend
replace the old ones
In einem anderen Prozess führt der Cache-Manager diese Logik aus
if (now() - cache.last_used) > inactive:
del cache
if all-cache.size > max-size:
del *the most inactive cache* until size < max-size
Was ist, wenn proxy_cache_valid (12h) höher als der angegebene inaktive Wert (1h) in proxy_cache_path ist?
Solange die Anforderung ausgeführt wurde und auf den jeweiligen Cache zugegriffen wurde, ist dieses Cache-Objekt noch bis 12 Stunden nach dem Einfügen des Objekts in den Cache gültig. Danach galt der Cache als ungültig, sodass Nginx vom Backend abruft und den gültigen Timer zurücksetzt. Wenn das Objekt jedoch länger als eine Stunde inaktiv war (auf das nicht zugegriffen wurde) - selbst in der 12-Stunden-Gültigkeitsperiode -, löscht nginx es aufgrund von inactive
Parametern.
365d
und gültig ist,1d
ruft nginx die Anforderungen ein Jahr lang jeden Tag im Cache ab, auch wenn diese Anforderung von niemandem gestellt wird.inactive
Parameter Zeitwerte an, aber ich sehe nicht, welche Werte ich außerh
(wie wäre es mit 1 Monat oder 1 Tag usw.) verwenden kann. Und womit sollen wir spezifizierenmax_size
? Bytes? Kann ich 1M für 1 Megabyte verwenden?