Ver índice de contenidos del libro

14.6. Invalidando la caché

«Sólo hay dos cosas difíciles en el mundo de la computación: invalidar cachés y poner nombre a las cosas» --Phil Karlton

Nunca debería ser necesario invalidar los datos guardados en la caché porque la invalidación ya se produce implícitamente en los diferentes modelos de caché HTTP. Si utilizas la validación, por definición, no será necesario invalidar ninguna cosa; y si utilizas la caducidad y necesitas invalidar un recurso, significa que estableciste una fecha de caducidad demasiado lejana en el tiempo.

Nota Como la invalidación es un tema que depende de cada tipo de proxy inverso, si no te preocupa la invalidación puedes cambiar de un proxy inverso a otro sin tener que tocar la aplicación.

En realidad, todos los proxy inversos proporcionan una manera de purgar los datos almacenados en la caché, pero debes evitarlo tanto como sea posible. La forma más habitual es purgar la caché de una URL consiste en hacer una petición a esa URL con el método especial de HTTP llamado PURGE.

Este es el código necesario para hacer que el proxy inverso que incluye Symfony2 soporte el método PURGE de HTTP:

// app/AppCache.php
 
// ...
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
 
class AppCache extends HttpCache
{
    protected function invalidate(Request $request, $catch = false)
    {
        if ('PURGE' !== $request->getMethod()) {
            return parent::invalidate($request, $catch);
        }
 
        $response = new Response();
        if (!$this->getStore()->purge($request->getUri())) {
            $response->setStatusCode(404, 'Not purged');
        } else {
            $response->setStatusCode(200, 'Purged');
        }
 
        return $response;
    }
}

Advertencia No olvides proteger el método PURGE de alguna manera para evitar que cualquiera pueda borrar los datos de tu caché.