📒 

Utilisation des commandes scan dans Redis sous Linux

Redis, un magasin de structures de données en mémoire open-source, est connu pour sa rapidité et sa polyvalence en tant que base de données clé-valeur. L’une de ses puissantes fonctionnalités est la possibilité d’itérer de manière incrémentale dans les ensembles de données à l’aide de commandes de scan. Cette fonction est particulièrement utile lorsqu’il s’agit de grands ensembles de données, car elle permet d’extraire efficacement les données sans surcharger le serveur. Pour les utilisateurs d’un serveur Linux dédié, l’utilisation de commandes de scan dans Redis peut améliorer les performances de traitement des données en permettant un traitement précis et optimisé des ensembles de données. Dans cet article, nous allons voir comment utiliser efficacement les commandes scan dans Redis dans un environnement Linux, en proposant des exemples détaillés et les meilleures pratiques pour gérer et récupérer des données à l’échelle…

Que sont les commandes scan ?

Les commandes de scan de Redis permettent d’itérer sur des clés, des ensembles, des hachages et des ensembles triés de manière non bloquante. Contrairement à la commande KEYS, qui peut être dangereuse pour les grands ensembles de données car elle renvoie toutes les clés correspondantes en même temps, les commandes de scan renvoient un petit nombre d’éléments à la fois. Cela minimise l’impact sur les performances et permet une itération incrémentale.

Commandes scan des clés

  1. SCAN: parcourt les clés de l’espace-clé.
  2. SSCAN: parcourt les éléments d’un ensemble.
  3. HSCAN: parcourt les champs et les valeurs d’un hachage.
  4. ZSCAN: parcourt les membres et les scores d’un ensemble trié.

Syntaxe de base des commandes scan

Chaque commande scan a une syntaxe similaire :

SCAN cursor [MATCH pattern] [COUNT count]
  • curseur: Un nombre entier qui représente la position à partir de laquelle le scan doit commencer. Pour commencer un nouveau scan, utilisez 0.
  • MATCH pattern: (optionnel) Un motif pour filtrer les clés renvoyées. Prend en charge les motifs de type “glob”.
  • COUNT count: (facultatif) Indication à Redis du nombre d’éléments à renvoyer à chaque itération.

Installation de Redis sous Linux

Avant d’utiliser les commandes scan, assurez-vous que Redis est installé sur votre système Linux. Pour ceux qui utilisent un serveur dédié Debian, l’installation de Redis est simple et peut améliorer la capacité du serveur à gérer efficacement le traitement des données en mémoire. Voici comment installer Redis sur un système basé sur Debian, afin de garantir un environnement stable et optimisé pour des opérations de haute performance.

En suivant ces étapes, vous installerez Redis de manière à exploiter les ressources et la stabilité de votre serveur Debian dédié, idéal pour les tâches de traitement de données robustes.

sudo apt update
sudo apt install redis-server

Pour CentOS/RHEL, utilisez :

sudo yum install redis

Une fois installé, démarrez le serveur Redis :

sudo systemctl start redis

Connexion à Redis

Ouvrez votre terminal et connectez-vous à votre instance Redis en utilisant le CLI Redis :

redis-cli

Vous pouvez maintenant exécuter des commandes Redis dans le CLI.

Utiliser la commande SCAN

Exemple 1 : SCAN de base

Pour récupérer toutes les clés de la base de données Redis, vous pouvez utiliser la commande SCAN :

SCAN 0

Cette commande renvoie un curseur et une liste de clés.

Exemple 2 : Utilisation de MATCH pour filtrer les touches

Si vous souhaitez trouver les touches qui correspondent à un modèle spécifique, par exemple les touches qui commencent par “user :”, vous pouvez utiliser la commande MATCH :

SCAN 0 MATCH nomutilisateur:*

Cette commande ne renvoie que les clés qui commencent par “user :”.

Exemple 3 : Spécifier COUNT

Pour indiquer le nombre de clés que Redis doit renvoyer à chaque itération, vous pouvez spécifier un nombre :

SCAN 0 COUNT 10

Cette méthode tentera de renvoyer environ 10 clés. Notez que le nombre réel de clés renvoyées peut être inférieur à ce chiffre.

Exemple 4 : Itérer à travers toutes les clés

Pour parcourir toutes les touches en plusieurs itérations, vous devez garder une trace du curseur renvoyé. Voici un exemple simple de script shell :

curseur=0
while true; do
result=$(redis-cli SSCAN myset $cursor MATCH apple:*)
echo "$result" # Traiter le résultat selon les besoins
cursor=$(echo "$result" | awk 'NR==1{print $1}') # Mettre à jour le curseur
if [[ "$cursor" == "0" ]] ; then
break # Arrête lorsque le curseur est revenu à 0
fi
done

Utilisation de la commande SSCAN

La commande SSCAN est utilisée pour parcourir les éléments d’un ensemble. Sa syntaxe est similaire à celle de SCAN :

SSCAN touche curseur [MATCH pattern] [COUNT count]

Exemple de SSCAN

Étape 1 : Créer un ensemble et ajouter des éléments

Créons un ensemble appelé myset et ajoutons-y des éléments :

SADD myset "pomme"
SADD myset "banane"
SADD myset "cerise"
SADD myset "date"
SADD myset "sureau"

Étape 2 : Utiliser la commande SSCAN

Maintenant que nous disposons d’un ensemble nommé myset, nous pouvons utiliser la commande SSCAN pour parcourir ses éléments.

  1. Commande SSCAN de base: Supposons que vous disposiez d’un ensemble appelé “myset”. Pour parcourir ses éléments :
    SSCAN myset 0
  2. Utilisation de MATCH:Pour filtrer les éléments d’un ensemble sur la base d’un modèle et ajouter des éléments comprenant le mot “mango” et d’autres variations: :
    SSCAN myset 0 MATCH mango:*
  3. Itérer dans un ensemble:Vous pouvez utiliser une boucle pour itérer dans un ensemble :

#!/bin/bash
curseur=0
echo "Scanner à travers myset :"
while true; do
# Scanner l'ensemble
result=$(redis-cli SSCAN myset $cursor)
# Imprime les éléments retournés par SSCAN
echo "$result"
# Met à jour le curseur pour la prochaine itération
cursor=$(echo "$result" | awk 'NR==1{print $1}')
# Interrompre la boucle si le curseur est revenu à 0
if [[ "$cursor" == "0" ]] ; then
break
fi
done

Exécution du script

  1. Enregistrez le script sous le nom de scan_myset.sh.
  2. Rendez-le exécutable :
    chmod x scan_myset.sh
  3. Exécutez le script :
    ./scan_myset.sh

Utilisation des commandes HSCAN et ZSCAN

Commande HSCAN

La commande HSCAN parcourt les champs et les valeurs d’un hachage :

HSCAN curseur clé [MATCH motif] [COUNT compte]

La commande HSCAN est utilisée pour parcourir les champs et les valeurs d’un hachage.

Étape 1 : Création d’un hachage et ajout de champs

  1. Créez un hachage nommé myhash et ajoutez-y des champs :
HSET myhash nom "Jean Dupont"
HSET myhash âge "30"
HSET myhash occupation "Développeur de logiciels"
HSET myhash ville "San Francisco"
HSET myhash country "USA"

Étape 2 : Utiliser HSCAN pour parcourir le hachage

  1. Utilisez la commande HSCAN pour parcourir les champs de myhash :
HSCAN myhash 0

Commande ZSCAN

ZSCAN est une commande Redis utilisée pour parcourir les membres d’un ensemble trié de manière incrémentielle. Elle vous permet de récupérer les membres avec leurs scores associés d’une manière efficace et non bloquante. Cette commande est particulièrement utile pour travailler avec de grands ensembles triés où la récupération de tous les membres en une seule fois n’est pas pratique.

La commande ZSCAN parcourt les membres et les scores d’un ensemble trié :

ZSCAN curseur clé [MATCH pattern] [COUNT count]

Étape 1 : Créer un ensemble trié et ajouter des membres

Créons un ensemble trié appelé mysortedset et ajoutons quelques membres avec des scores :

ZADD mysortedset 1 "pomme"
ZADD mysortedset 2 "banane"
ZADD mysortedset 3 "cerise"

Commande de base ZSCAN :

Pour commencer à scanner l’ensemble trié, utilisez la commande suivante :

ZSCAN mysortedset 0

Étape 2 : Utilisation de MATCH pour filtrer les membres (facultatif)

Si vous souhaitez filtrer les membres renvoyés par ZSCAN, vous pouvez utiliser l’option MATCH. Par exemple, pour trouver les membres qui contiennent la lettre “e”, vous pouvez exécuter :

ZSCAN mysortedset 0 MATCH *e*

Bonnes pratiques pour l’utilisation des commandes de scan

  1. Utilisez SCAN plutôt que KEYS: évitez d’utiliser la commande KEYS en production car elle peut bloquer le serveur. Utilisez SCAN pour une itération non bloquante.
  2. Combinez avec MATCH et COUNT: Utilisez les options MATCH et COUNT pour améliorer les performances et limiter l’ensemble des résultats.
  3. Traitez les grands ensembles de données: Lorsque vous traitez de grands ensembles de données, traitez les clés par lots à l’aide de curseurs afin de gérer efficacement la mémoire.
  4. Testez en développement: Testez toujours votre logique d’analyse dans un environnement de développement pour vous assurer qu’elle se comporte comme prévu avant de la déployer en production.

Conclusion

L’utilisation des commandes de scan dans Redis vous permet de parcourir efficacement de grands ensembles de données dans un environnement Linux sans surcharger votre serveur. En comprenant comment utiliser SCAN, SSCAN, HSCAN et ZSCAN, vous pouvez gérer et récupérer efficacement les données de Redis. Ces commandes sont essentielles pour créer des applications évolutives qui nécessitent un traitement des données en temps réel. Pour plus d’informations et une utilisation détaillée, reportez-vous à la documentation officielle de Redis et expérimentez ces commandes dans votre environnement Redis.