Patrones de invalidación de caché
Aplique estrategias de caché aparte, escritura simultánea e invalidación basada en TTL.
Patrones de invalidación de caché es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
El problema difícil
"Solo hay dos problemas difíciles en la informática: invalidar la caché y poner nombres a las cosas". — Phil Karlton. Saber cuándo y cómo invalidar los datos almacenados en caché es fundamental.
Caducidad basada en TTL (pasiva)
La estrategia más sencilla: establezca un TTL y acepte que la caché puede proporcionar datos obsoletos durante ese tiempo como máximo. Funciona cuando se tolera cierto grado de obsolescencia.
<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automaticallyInvalidación mediante escritura directa
Cuando actualice los datos, elimine o actualice inmediatamente la clave de caché correspondiente.
<?php
function updateUser(int $id, array $data): void {
User::find($id)->update($data);
Cache::forget("user:$id"); // delete cache
// Or re-warm:
Cache::put("user:$id", User::find($id), 300);
}Etiquetado de caché
Etiquete las entradas de caché relacionadas para poder invalidar todo el grupo de una vez; por ejemplo, todas las entradas de caché de un usuario específico.
<?php
// Store with tags:
Cache::tags(["user:1", "posts"])->put("user:1:recent-posts", $posts, 600);
// Invalidate all "user:1" entries:
Cache::tags("user:1")->flush();Invalidación basada en eventos
En Laravel, utilice los eventos de modelos Eloquent para invalidar automáticamente la caché cuando se guarde o elimine un modelo.
<?php
class User extends Model {
protected static function booted(): void {
static::saved(fn($u) => Cache::forget("user:{$u->id}"));
static::deleted(fn($u) => Cache::forget("user:{$u->id}"));
}
}Cache-aside con versionado
Añada un número de versión a las claves de caché. Incrementar la versión invalida de forma efectiva todas las entradas existentes sin eliminarlas.
<?php
$v = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");Caducidad anticipada probabilística (PER)
Para evitar avalanchas de solicitudes a la caché, vuelva a calcularla ligeramente antes de que caduque para una parte de las solicitudes. Así se evita que caduque simultáneamente en todos los servidores.
Actualización en segundo plano
Un trabajo en segundo plano vuelve a llenar las entradas de caché consultadas con frecuencia antes de que caduquen. La caché nunca queda vacía: las lecturas siempre son rápidas.
Stale-While-Revalidate
Proporcione inmediatamente los datos obsoletos mientras actualiza la caché de forma asíncrona en segundo plano. Así se eliminan los picos de latencia provocados por los fallos de caché.
Invalidación de caché distribuida
En una configuración con varios servidores, que un servidor invalide una clave de caché no elimina automáticamente las cachés locales de los demás servidores. Utilice Redis pub/sub o un almacén compartido para difundir las invalidaciones.
Jerarquía de cachés
Organice las cachés por capas: una caché local en el proceso (APCu) delante de una caché distribuida (Redis). La caché local es más rápida, pero debe invalidarse en todas las instancias cuando cambien los datos.
Resumen
Patrones habituales: caducidad por TTL (sencilla), eliminación mediante escritura directa (precisa), etiquetado (por grupos) y basada en eventos (automática). Elija según el nivel de actualización de datos que necesite y la simplicidad que desee mantener.
Comprobación rápida
¿Qué hace Cache::tags()->flush()?
Preguntas frecuentes
¿La lección «Patrones de invalidación de caché» es gratis?
Sí — el texto completo de «Patrones de invalidación de caché» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Patrones de invalidación de caché»?
Aplique estrategias de caché aparte, escritura simultánea e invalidación basada en TTL. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Patrones de invalidación de caché»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué es importante la caché en PHP
- Redis como backend de caché para PHP
- Memcached para el almacenamiento en caché de sesiones y objetos
- Patrones de invalidación de caché