Redis, c’est du cache, mais c’est aussi bien plus. Connaissez vous les Streams ? Leurs cas d’usages sont infinis : que ce soit pour l’écriture de logs, l’agrégation de données, les notifications, ou même l’écriture d’un énorme fichier. On peut facilement imaginer qu’en couplant les Streams aux générateurs de PHP, les performances d’un tel système peuvent dépasser toutes les attentes.
Date : 13/10/2023 de 14h20 à 14h40
Nom des conférenciers : Alexandre DAUBOIS
Qu’est ce que Redis ?
Redis est un système de Cache écrit en C, il stocke en mémoire et fonctionne à base de clef/valeur.
Pour trouverez plus d’infos sur ces concepts dans les articles suivants présents sur notre blog :
La problématique soulevée lors de cette présentation était la suivante : comment mettre en ligne des fichiers volumineux sur des serveurs Cloud en passant par Redis ?
Les Streams dans Redis
Les structures Stream dans Redis sont assez récentes, elles ont été ajoutées il y a 2/3 ans.
Redis, en association avec les structures Stream, a été sélectionné pour cette tâche en raison de sa capacité à gérer de manière extrêmement rapide les opérations d’ajout uniquement (append only).
D’après Alexandre, Redis Stream pourrait traiter jusqu’à 1 million d’insertions par seconde.
Predis
Predis est une bibliothèque PHP open source qui permet de communiquer avec un serveur Redis de manière simple et efficace. Elle offre une interface pratique pour interagir avec Redis.
Présentation de LazyStream
C’est dans cette optique qu’a été présentée LazyStream, un composant pour PHP développé sur mesure pour résoudre cette problématique.
Il utilise Predis et les structures Stream de Redis pour sérialiser de petits morceaux de données au format JSON.
Ce composant s’appuie sur un Générateur, ou une « fonction génératrice » pour découper les données en morceaux (en chunks) en utilisant les « yield
» .
LazyStream a été conçu pour simplifier le développement. En lui fournissant une URL et un générateur, il gère tout le processus. Tout commence dès que la fonction trigger
est appelée.
De plus, il offre la possibilité de créer un MultiLazyStream, ce qui autorise l’envoi de données vers plusieurs serveurs simultanément.