En Nginx, la memoria compartida (keys_zone
) es un espacio en RAM donde se almacenan las claves y metadatos de los objetos en caché. No almacena los archivos en sí, solo las referencias a ellos.
Cuando un cliente solicita un recurso, Nginx primero revisa esta memoria compartida para verificar si la respuesta ya está en la caché. Si la clave está presente, Nginx sirve el archivo desde el disco sin necesidad de consultar el backend.
¿Cómo funciona keys_zone
?
proxy_cache_path /var/cache/nginx/site levels=2:2:2 keys_zone=site:10m max_size=1g inactive=1h use_temp_path=off;
keys_zone=site:10m
site
: Nombre de la zona de caché.10m
: Tamaño de la memoria compartida (10 MB).
Esta memoria almacena las claves y metadatos de los objetos en caché. Cada clave ocupa aproximadamente 64 bytes más metadatos, por lo que con 10 MB podríamos almacenar alrededor de 100,000 claves.
¿Por qué se usa?
- Evita consultas innecesarias al disco → Como la memoria RAM es mucho más rápida, Nginx primero revisa la
keys_zone
antes de buscar en el disco. - Mejora el rendimiento en servidores con múltiples procesos → Todos los procesos de Nginx pueden acceder a la misma memoria compartida, evitando bloqueos y asegurando que la caché sea coherente.
- Facilita la invalidación de caché → Puedes usar
proxy_cache_purge
para borrar objetos de la caché de manera eficiente.
Ejemplo práctico
Si un usuario solicita https://ejemplo.com/api/datos.json
:
- Nginx busca en
keys_zone
si la clave de esta URL está almacenada. - Si existe en
keys_zone
, significa que el objeto está en caché → Se recupera del disco y se envía al usuario. - Si no existe en
keys_zone
, Nginx consulta el backend, almacena el objeto en la caché y guarda la clave enkeys_zone
.
¿Cuánto tamaño en RAM debo asignar a keys_zone
?
Depende de cuántos objetos quieras almacenar en caché. Una guía aproximada:
Tamaño de keys_zone | Cantidad de claves (aprox.) |
---|---|
1 MB | 10,000 claves |
10 MB | 100,000 claves |
50 MB | 500,000 claves |
100 MB | 1,000,000 claves |
Si tienes muchas peticiones y una caché grande (max_size=10g
por ejemplo), es recomendable aumentar keys_zone
.
Conclusión
La memoria compartida de keys_zone
en Nginx no almacena archivos, sino solo las claves y metadatos de la caché, lo que acelera la búsqueda de objetos. Se recomienda asignar suficiente espacio en función del número de objetos que esperas almacenar en caché.