Nous allons parler dans cet article sur l’utilisation du Redis avec PHP. Vous avez dit Redis ?

Redis est un système de gestion de base de données clé-valeur, écrit avec le langage C et distribué sous licence BSD. Il fait partie de la mouvance NoSql et vise à fournir les performances les plus élevées possibles.

Redis permet de manipuler des types de données simples :

  • strings
  • hashes
  • lists
  • sorted sets

Une des principales caractéristiques de Redis est de conserver l’intégralité des données en RAM.

Lorsque la taille des données est trop importante pour tenir en mémoire, Redis peut également utiliser de la mémoire virtuelle. Afin d’assurer la conservation des données en cas d’incident Redis offre la possibilité de « capturer » l’état de la base dans un fichier.

Redis supporte la réplication via un modèle maître-esclave. Toutes les écritures doivent se faire via l’ensemble maître, mais il est possible de faire des lectures sur les instances esclaves.

On a trop parlé, il faut pratiquer maintenant 

Je donne un exemple en Symfony/Ibexa

use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
use Symfony\Component\Cache\Adapter\RedisAdapter;

$client = RedisAdapter::createConnection(
'redis://127.0.0.1:6379/',[]
);
$cacheRedis = new RedisTagAwareAdapter($client);
$cacheItem = $cacheRedis->getItem('team-information');

if ($cacheItem->isHit()) {
return new JsonResponse($cacheItem->get());
} else {
$cacheItem->set([
"cli1" => 'A',
"cli2" => 'B',
"cli3" => 'C',
]);
$cacheItem->expiresAfter(3600);

// $tags[] = 'tag-ibx-urlall-2988';
// $cacheItem->tag($tags);

$cacheRedis->save($cacheItem);
}

À noter que si vous êtes dans un contexte MultiSite, avec SiteAccessAware, il faudra adapter le code pour qu’il fonctionne correctement. Le « X » dans l’exemple reflète l’index de la base Redis (consultez le fichier config/packages/cache_pool/cache.redis.yaml).

$client = RedisAdapter::createConnection(
'redis://127.0.0.1:6379/X',[]
);

Il s’agit d’un exemple basique. Par la suite, on peut l’améliorer et gérer plusieurs cas

Selon la documentation Ibexa, ceci est possible https://doc.ibexa.co/en/3.3/guide/persistence_cache/#getting-cache-service

Reste à savoir que redis stocke les données en mémoire (RAM), ce qui peut devenir un inconvénient si votre application génère un grand volume de données à cache. Pour un environnement multisite avec de nombreux accès, la mémoire peut devenir une contrainte importante.

La commande redis-cli -n X dans Redis spécifie le numéro de la base de données à laquelle vous souhaitez accéder ou effectuer des opérations.

  • redis-cli -n 2

Cela connecte le client Redis (redis-cli) à la base de données 2. Toutes les opérations exécutées via cette connexion s’appliqueront à cette base de données spécifique.

Si vous ne spécifiez pas l’option -n, Redis se connecte à la base de données 0 par défaut.Chaque base de données dans Redis est relativement simple et sert principalement à des fins d’isolation logique dans le même serveur Redis.

Une fois connecté

redis-cli -n 2    # Se connecter à la base de données 2
GET myKey         # Récupérer la valeur de 'myKey'
KEYS '*'          # Récupérer toutes les clés dans la base de données 2
FLUSHALL          # Supprimer toutes les clés de toutes les bases de données sue le serveur
FLUSHDB           # Efface uniquement la base de données active

A suivre …..