¿Qué significa keys_zone = myCache: 8m?
Como dice la documentación , nginx mantendrá todas las claves activas y la información sobre los datos se almacena en una zona de memoria compartida, name
y size
está configurada por el parámetro keys_zone. Como cuestión de exhaustividad, analicemos por parte
/var/cache/nginx
es el lugar donde se almacena el caché real. Dentro de la carpeta, el archivo de caché era un archivo binario pero puede detectar fácilmente la etiqueta html dentro de él.
levels=1:2
Este parámetro de niveles establece el número de niveles de subdirectorio en caché.
keys_zone=myCache:8m
estaba definiendo una zona de memoria compartida llamada myCache con un tamaño máximo de 8 MB. Contiene todas las claves y metadatos activos de la memoria caché. Por lo tanto, cada vez que nginx comprueba si una página se almacenó en caché, primero consulta la zona de memoria compartida, luego busca la ubicación de la caché real /var/cache/nginx
si existe caché.
max_size
era el tamaño máximo de caché, por ejemplo, el tamaño de los archivos en /var/cache/nginx
.
inactive=1h
especificar el tiempo máximo de inactividad que se puede almacenar en caché. Los datos en caché a los que no se accede durante el tiempo especificado por el inactive
parámetro se eliminan de la memoria caché independientemente de su actualización.
Cómo funciona la validación y eliminación de caché
Tomado de las listas de correo nginx
La directiva proxy_cache_valid especifica durante cuánto tiempo la respuesta se considerará válida (y se devolverá sin ninguna solicitud de back-end). Después de este tiempo, la respuesta se considerará "obsoleta" y no se devolverá o dependerá de la configuración proxy_cache_use_stale .
El argumento inactivo de proxy_cache_path especifica cuánto tiempo se almacenará la respuesta en caché después del último uso. Tenga en cuenta que incluso las respuestas obsoletas se considerarán utilizadas recientemente si hay solicitudes para ellas.
Según tengo entendido, aquí el pseudocódigo cómo funciona nginx
Cuando la solicitud viene
if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
use it
else:
retrieve from backend
replace the old ones
En otro proceso, el administrador de caché realiza esta lógica
if (now() - cache.last_used) > inactive:
del cache
if all-cache.size > max-size:
del *the most inactive cache* until size < max-size
¿Qué sucede si proxy_cache_valid (12h) es mayor que el valor inactivo especificado (1h) en proxy_cache_path?
Mientras la solicitud y el acceso a la caché en particular, ese objeto de caché seguirá siendo válido hasta 12 h después de que el objeto se haya guardado en la caché. Después de eso, el caché se consideró inválido, por lo que nginx buscará desde el backend y restablecerá el temporizador válido. Pero si el objeto estuvo inactivo (no se accedió) más de una hora, incluso en un período de 12 horas de caché válido, nginx lo eliminará debido al inactive
parámetro.
365d
y válido es1d
entonces nginx buscará las solicitudes en el caché todos los días durante un año, incluso si nadie hace esa solicitud.