26/03/2023

2. Mise en cache

Lu 259 fois Licence Creative Commons

Mise en cache

Symfony fournit de base un système de cache très pratique. Il nous sera utile pour n'effectuer qu'un seul appel à l'API et pour conserver le résultat jusqu'à la fin de la journée.
Par défaut, les éléments mis en cache utiliseront le système de fichier (précisément le dossier /var/cache).

Injecter le service de cache dans CitationService:

use Symfony\Contracts\Cache\CacheInterface;

// ...
class CitationService
{
    public function __construct(
        // ...
        private readonly CacheInterface $cache,
    ) {
    }
	
	// ...
}

Puis englober l'appel HTTP et la déserialisation avec la mise en cache:

    private function makeCitationRequest(): CitationResponse
    {
        return $this->cache->get('citation', function (ItemInterface $item): CitationResponse {
            $item->expiresAt(new \DateTime('tomorrow'));

            // ...
        });
    }

On passe une clé citation, pour identifier l'élément mis en cache. Si l'élément est déjà dans le cache et toujours valide, il est retourné, sinon la fonction sera exécutée.
La fonction peut manipuler l'élément mis en cache en tant que tel ($item), notamment pour indiquer son expiration. Dans le cas présent on souhaite que l'élément expire le lendemain.

On a désormais une citation en bas de page, qui change chaque jour.