# ¿Qué es la memoria compartida en keys_zone?

- Link: https://binariocero.com/articulos/que-es-la-memoria-compartida-en-keys_zone
- Published: 2025-01-29T13:10:02+01:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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`?**

    ```wp-block-preformatted
    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?**

 1. **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.
 2. **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.
 3. **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`:

 1. Nginx **busca en `keys_zone`** si la clave de esta URL está almacenada.
 2. Si **existe en `keys_zone`**, significa que el objeto está en caché → Se recupera
    del disco y se envía al usuario.
 3. Si **no existe en `keys_zone`**, Nginx consulta el backend, almacena el objeto 
    en la caché y guarda la clave en `keys_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é.
