Caché de datos
La función cache te permite almacenar en caché los resultados de la obtención de datos o de cálculos. Ofrece un control granular sobre los datos y es adecuada para escenarios como el renderizado del lado del cliente (CSR) y el renderizado del lado del servidor (SSR).
Uso básico
Parámetros
fetchData: la funciónfetchDatade un DataLoader.options(opcional): configuración de la caché.tag: una etiqueta para identificar la caché, que puede usarse para invalidarla.maxAge: el periodo de validez de la caché (en milisegundos).revalidate: una ventana de tiempo para revalidar la caché (en milisegundos), similar a la funcionalidadstale-while-revalidatede HTTP Cache-Control.getKey: una función simplificada de generación de claves de caché que crea una clave a partir de los argumentos de la función.onCache: una función de callback que se ejecuta cuando los datos se almacenan en caché, usada para gestionar de forma personalizada los datos en caché.
El tipo del parámetro options es el siguiente:
Valor de retorno
La función cache devuelve una nueva función fetchData con capacidad de caché. Llamar varias veces a esta nueva función no provocará ejecuciones repetidas.
Ámbito de uso
Esta función solo se puede usar dentro de un DataLoader.
Uso detallado
maxAge
Después de cada cálculo, el framework registra el momento en que los datos se escribieron en la caché. Cuando se vuelve a llamar a la función, comprueba si la caché ha caducado según el parámetro maxAge. Si ha caducado, se vuelve a ejecutar la función fn; de lo contrario, se devuelven los datos en caché.
revalidate
El parámetro revalidate establece una ventana de tiempo para revalidar la caché una vez caducada. Puede usarse junto con el parámetro maxAge, de forma similar al modelo stale-while-revalidate de HTTP Cache-Control.
En el siguiente ejemplo, si se llama a getDashboardStats dentro de la ventana de 2 minutos sin caducar, devuelve los datos en caché. Si la caché ha caducado (entre 2 y 3 minutos), las solicitudes entrantes recibirán primero los datos antiguos y, a continuación, se hará una nueva solicitud en segundo plano para actualizar la caché.
tag
El parámetro tag se usa para identificar una caché mediante una etiqueta, que puede ser una cadena o un array de cadenas. Esta etiqueta puede usarse para invalidar la caché, y varias funciones de caché pueden compartir la misma etiqueta.
getKey
El parámetro getKey te permite personalizar cómo se generan las claves de caché. Por ejemplo, puede que solo necesites basarte en un subconjunto de los parámetros de la función para diferenciar las cachés. Es una función que recibe los mismos argumentos que la función original y devuelve una cadena como clave de caché:
También puedes usar la función generateKey junto con getKey para generar claves de caché:
La función generateKey garantiza que se genere una clave única y coherente aunque cambie el orden de las propiedades del objeto, lo que asegura una caché estable.
customKey
Tanto customKey como getKey te permiten personalizar las claves de caché; la diferencia está en el alcance:
getKeysolo sobrescribe la parte de los "argumentos" de la clave: la propia función sigue participando en el cálculo de la clave de caché. Dos funciones distintas cuyogetKeydevuelva el mismo valor no compartirán la caché.customKeydevuelve la clave de caché final completa, reemplazando la clave predeterminada "función + argumentos" del framework. Por lo tanto, puede hacer que funciones distintas compartan la misma caché.
Si solo quieres derivar la clave de caché a partir de algunos argumentos, usa getKey. Usa customKey solo cuando necesites compartir cachés entre funciones o en casos avanzados similares.
customKey recibe un objeto con las siguientes propiedades y debe devolver una cadena o un Symbol; ese valor se usa directamente como clave de caché final:
params: los argumentos pasados a la función en caché.fn: la función original en caché.generatedKey: la clave de caché original que el framework genera automáticamente a partir de los parámetros de entrada.
El siguiente ejemplo muestra cómo customKey permite compartir la caché entre funciones:
onCache
El parámetro onCache te permite hacer un seguimiento de las estadísticas de la caché, como la tasa de aciertos. Es una función de callback que recibe información sobre cada operación de caché, incluidos su estado, clave, parámetros y resultado. Puedes devolver false desde onCache para impedir un acierto de caché.
El callback onCache recibe un objeto con las siguientes propiedades:
status: el estado de la operación de caché, que puede ser:hit: acierto de caché; devuelve el contenido en caché.miss: fallo de caché; ejecuta la función y almacena el resultado en caché.stale: acierto de caché, pero los datos están obsoletos; devuelve el contenido en caché y lo revalida en segundo plano.
key: la clave de caché, que puede ser el resultado decustomKeyo la clave generada por defecto.params: los argumentos pasados a la función en caché.result: los datos del resultado (ya sea de la caché o recién calculados).
Este callback solo se llama cuando se proporciona el parámetro options. Si usas una función de caché sin opciones, el callback onCache no se invoca.
El callback onCache resulta muy útil para:
- Monitorizar el rendimiento de la caché.
- Calcular tasas de aciertos.
- Registrar las operaciones de caché.
- Implementar métricas personalizadas.
Almacenamiento
Actualmente, tanto en el cliente como en el servidor, la caché se almacena en memoria. Por defecto, el límite de almacenamiento compartido por todas las funciones de caché es de 1 GB. Cuando se alcanza este límite, se usa el algoritmo LRU (Least Recently Used, menos usado recientemente) para eliminar las cachés antiguas.
Dado que no se espera que el contenido almacenado por la función cache sea muy grande, actualmente se almacena en memoria de forma predeterminada.
Puedes especificar el límite de almacenamiento de la caché con la función configureCache: