Programmation PHP/Redis

Un livre de Wikilivres.
Aller à la navigation Aller à la recherche



Installation[modifier | modifier le wikicode]

Redis est comme Memcached, un système de gestion de base de données clef-valeur scalable, très hautes performances. En 2019, il devient plus utilisé que Memcached car il possède plus de fonctionnalités[1]. Par exemple il permet en plus une persistance sur la mémoire morte utile pour les reprises sur panne, autoriser les groupes de paires clé-valeur, et gère mieux le parallélisme[2].

Pour l'installer :

 sudo apt-get install redis-server

Client[modifier | modifier le wikicode]

Sur Docker PHP :

 RUN pecl install redis \
    && docker-php-ext-enable redis

Commandes[modifier | modifier le wikicode]

Pour se loguer au serveur Redis :

telnet nom_du_serveur 6379

Les commandes Redis les plus utiles[3] :

  • MONITOR : suivre l'activité du serveur en temps réel.
  • KEYS * : liste des clés.
  • FLUSHALL : vider toute la base de données.
  • DEL : supprimer par le nom complet de la clé.
  • QUIT : quitter.

Exemple de reset mémoire depuis le shell :

echo "FLUSHALL" | nc -q 1 localhost 6379

redis-cli[modifier | modifier le wikicode]

Pour afficher les clés de la base en shell :

redis-cli KEYS '*'

Par défaut, redis-cli pointe sur 127.0.0.1. Pour regarder une autre machine :

redis-cli -h redis.example.com KEYS '*'

Supprimer des clés par leurs noms[4] (exemple de celles qui ont le préfixe "users:") :

redis-cli KEYS "users:*" | xargs redis-cli DEL

ou :

redis-cli --scan --pattern users:* | xargs redis-cli DEL



Utilisation en PHP[modifier | modifier le wikicode]

$redis = new \Redis();
$redis->connect('localhost', 6379);
$redis->set('nom du test', 'valeur du test');
echo $redis->get('nom du test');

predis[modifier | modifier le wikicode]

Cette bibliothèque permet d'utiliser Redis en clustering, avec des masters et slaves[5].

Dans Symfony[modifier | modifier le wikicode]

Dans le framework PHP Symfony.

Session[modifier | modifier le wikicode]

SncRedisBundle[modifier | modifier le wikicode]

Avant Symfony 4.1, il fallait passer par un bundle tel que SncRedisBundle[6].

composer require snc/redis-bundle predis/predis

Pour que les sessions soient stockées dans Redis au lieu de var/cache/, remplacer dans framework.yaml, session.handler_id: null par snc_redis.session.handler. Cela permet par exemple de les partager entre plusieurs conteneurs.

RedisSessionHandler[modifier | modifier le wikicode]

Depuis Symfony 4.1, le composant HttpFoundation contient une classe RedisSessionHandler[7].

Installation dans services.yaml :

    redis:
        class: Redis
        calls:
            - connect:
                - '%env(REDIS_HOST)%'
                - '%env(int:REDIS_PORT)%'

    Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler:
        arguments:
            - '@redis'

Puis dans config/packages/framework.yaml[8] :

framework:
    session:
        handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler

Ensuite le service session utilisera automatiquement Redis.

Doctrine[modifier | modifier le wikicode]

Pour mettre le cache Doctrine de requête et de résultat dans Redis, on peut utiliser SncRedisBundle[9][10].

Pour vider les caches :

bin/console cache:pool:clear doctrine.query_cache_pool doctrine.result_cache_pool doctrine.system_cache_pool

Références[modifier | modifier le wikicode]