En el patrón cache-aside (lazy loading), ¿quién llena la caché?
Opciones
- La propia base de datos llena la caché
- La app: si hay un miss, lee la base de datos y guarda en caché (Opción correcta)
- Un batch nocturno que precarga todas las claves
- La CDN llena la caché en cada petición
Respuesta
La aplicación: si hay un miss, lee la base de datos y luego escribe el valor en la caché
Por qué
Pasos de cache-aside: 1) la app pregunta a la caché; 2) si está (hit), lo usa; 3) si no (miss), lee de la base de datos y guarda el resultado en la caché con un TTL (tiempo de caducidad).
Solo se guardan en caché los datos que realmente se piden.
Desventajas: la primera petición es lenta, y los datos en caché pueden quedar desactualizados hasta que caduquen o los elimines al actualizar.
def get_user(uid):
user = cache.get(f"user:{uid}")
if user is None: # miss
user = db.load_user(uid)
cache.set(f"user:{uid}", user, ttl=300)
return userRecuerda
Cache-aside: mira la caché → si falla, carga de la BD → guarda en caché.