Nous sommes d'accord que lorsqu'on crée un cache lors de la lecture, il va falloir supprimer ce cache si l'information change. Autrement, la dite information sera rechargée du cache et donc pas à jour.

Dans l'exemple ci-dessous, je charge une liste de produits que je mets en cache :

$cache = Zend_Registry::get('cache') ;
$cache_id = 'product_list' ;
$products = $cache->load($cache_id) ;
if (!$products)    {
    // ... chargement depuis la base de données ...
    $cache->save($products, $cache_id, array('product')) ;
}

Comme on peut le voir, j'ai "tagué" le cache avec le terme product. Zend_Cache sait donc maintenant que ce cache fait partie de la famille ou catégorie des caches product.

Je peux imaginer maintenant, charger une deuxième liste de produits ou un résultat de recherche contenant des produits également, et taguer à nouveau ce cache dans cette même famille.

Plus tard, dans mon backoffice, je vais mettre à jour un produit et à la fin de ma mise à jour, je vais nettoyer mes caches.

$cache = Zend_Registry::get('cache') ;
$cache->clean(Zend_Cache::CLEANING_MODE_ALL, array('product')) ;

Eh oui, c'est déjà fait. Grâce à la méthod clean, j'ai effacé tous les caches de la famille product, en une seule et unique ligne.

Facile ! :)