dotrine redis

Comment ajouter du cache Redis à Doctrine

Le cache Doctrine est placé par défaut dans le dossier cache de votre projet Symfony. Et nous savons que les accès aux fichiers sur le disque ne sont pas les plus rapides.
Sur doctrine, il y a trois types de cache :
– Query Cache : transformation DQL -> SQL
– Result Cache : résultat de la requête
– Metadata Cache : annotation des entités
Le fait d’utiliser Redis a deux avantages :
– Un accès au cache plus rapide
– Une mutualisation du cache Doctrine
Nous allons voir comment écrire le cache Doctrine dans Redis.

Installation

Le snc/redis-bundle va grandement nous simplifier la mise en place du cache Doctrine avec Redis. Mais vous devez avoir l’extension redis ou du moins predis.

composer require predis/predis
composer require snc/redis-bundle

Grâce à la magie de Symfony, le bundle s’est configuré, presque, tout seul.

Configuration de SNC Redis

Nous allons ajouter la clé doctrine dans le fichier de configuration avec les trois types de cache et le tour est joué.

#snc_redis.yaml
snc_redis:
    clients:
        default:
            type: predis
            alias: default
            dsn: "%env(REDIS_URL)%"

    doctrine:
        metadata_cache:
            client: default
            entity_manager: default
            document_manager: default
        result_cache:
            client: default
            entity_manager: default
        query_cache:
            client: default
            entity_manager: default

Avec ceci, seuls les caches de metadata et de query sont opérationnels. Pour la mise en cache du résultat, il faudra le faire manuellement sur chaque requête.

Cache des résultats

<?php
public function findSomething()
{
    $query = $this->getEntityManager()
        ->createQuery(
            'select something from Something '
        )
    ;

    $query->useResultCache(true);
    $query->setResultCacheLifetime(3600); //3600sec = 1 hour

    return $query->getResult();
}

Et oui, cette partie ne ce fait pas automatiquement.

Vous avez désormais les trois types de cache Doctrine sur Redis.

Pour avoir une haute disponibilité de Redis, vous pouvez lire Les sentinelles Redis avec docker-compose

chevron_left
chevron_right

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Commentaire
Nom
E-mail
Site