Comment gérer les bases de données et les clés Redis

Introduction

Redis est un entrepôt de données clés-valeurs en mémoire open source. Un entrepôt de données clés-valeurs est un type de base de données NoSQL dans lequel les clés servent d’identificateurs uniques pour leurs valeurs associées. Chaque instance de Redis comprend un certain nombre de bases de données, chacune pouvant contenir de nombreuses clés différentes de différents types de données.

Dans ce tutoriel, vous apprendrez comment sélectionner une base de données, déplacer des clés entre les bases de données, et gérer et supprimer des clés.

Comment Utiliser Ce Guide

Ce guide est rédigé comme une feuille de triche avec des exemples autonomes. Nous vous encourageons à vous rendre à n’importe quelle section pertinente pour la tâche que vous essayez d’accomplir.

Les commandes indiquées dans ce guide ont été testées sur un serveur Ubuntu 22.04 exécutant la version Redis 6.0.16. Pour configurer un environnement similaire, vous pouvez suivre l’étape 1 de notre guide sur Comment installer et sécuriser Redis sur Ubuntu 22.04. Nous allons démontrer le comportement de ces commandes en les exécutant avec redis-cli, l’interface de ligne de commande Redis. Notez que si vous utilisez une interface Redis différente, comme Redli, par exemple, la sortie exacte de certaines commandes peut différer.

Alternativement, vous pouvez provisionner une instance de base de données Redis gérée pour tester ces commandes, mais selon le niveau de contrôle autorisé par votre fournisseur de base de données, certaines commandes de ce guide peuvent ne pas fonctionner comme décrit. Pour provisionner une base de données gérée par DigitalOcean, suivez notre documentation sur les produits de bases de données gérées. Ensuite, vous devez soit installer Redli soit configurer un tunnel TLS pour vous connecter à la base de données gérée via TLS.

Gestion des bases de données

En l’état, une instance Redis prend en charge 16 bases de données logiques. Ces bases de données sont effectivement isolées les unes des autres, et lors de l’exécution d’une commande dans une base de données, cela n’affecte pas les données stockées dans les autres bases de données de votre instance Redis.

Les bases de données Redis sont numérotées de 0 à 15 et, par défaut, vous vous connectez à la base de données 0 lors de la connexion à votre instance Redis. Cependant, vous pouvez changer la base de données que vous utilisez avec la commande select après la connexion :

  1. select 15

Si vous avez sélectionné une base de données autre que 0, cela se reflétera dans l’invite redis-cli :

Pour échanger toutes les données détenues dans une base de données avec celles d’une autre, utilisez la commande swapdb. L’exemple suivant échangera les données détenues dans la base de données 6 avec celles de la base de données 8, et tous les clients connectés à l’une ou l’autre base de données pourront implémenter des changements immédiatement :

  1. swapdb 6 8

swapdb renverra OK si l’échange est réussi.

Si vous souhaitez déplacer une clé vers une autre instance Redis, vous pouvez exécuter migrate. Cette commande garantit que la clé existe sur l’instance cible avant de la supprimer de l’instance source. Lorsque vous exécutez migrate, la commande doit inclure les éléments suivants dans cet ordre :

  • Le nom d’hôte ou l’adresse IP de la base de données de destination
  • Le numéro de port de la base de données cible
  • Le nom de la clé que vous souhaitez migrer
  • Le numéro de base de données où vous souhaitez stocker la clé sur l’instance de destination
  • A timeout, in milliseconds, which defines the maximum amount of idle communication time between the two machines. Note that this isn’t a time limit for the operation, but means that the operation should always make some level of progress within the defined length of time

Pour illustrer, voici un exemple :

  1. migrate 203.0.113.0 6379 key_1 7 8000

De plus, migrate permet les options suivantes que vous pouvez ajouter après l’argument de délai :

  • COPY : Spécifie que la clé ne doit pas être supprimée de l’instance source
  • REPLACE : Indique que si la clé existe déjà sur la destination, l’opération migrate doit la supprimer et la remplacer
  • KEYS : Au lieu de fournir une clé spécifique à migrer, vous pouvez entrer une chaîne vide ("") et utiliser ensuite la syntaxe de la commande keys pour migrer toute clé correspondant à un motif. Pour plus d’informations sur le fonctionnement de keys, consultez notre tutoriel sur Comment résoudre les problèmes dans Redis.

Gestion des clés

Il existe plusieurs commandes Redis utiles pour gérer les clés, quel que soit le type de données qu’elles contiennent. Certaines de ces commandes sont examinées dans la section suivante.

rename renommera la clé spécifiée. S’il réussit, il renverra OK :

  1. rename old_key new_key

Vous pouvez utiliser randomkey pour renvoyer une clé aléatoire de la base de données actuellement sélectionnée :

  1. randomkey
Output
"any_key"

Utilisez type pour déterminer quel type de données la clé donnée contient. La sortie de cette commande peut être soit string, list, hash, set, zset, ou stream:

  1. type key_1
Output
"string"

Si la clé spécifiée n’existe pas, type renverra none à la place.

Vous pouvez déplacer une clé individuelle vers une autre base de données dans votre instance Redis avec la commande move. move prend le nom d’une clé et la base de données vers laquelle vous voulez déplacer la clé en arguments. Par exemple, pour déplacer la clé key_1 vers la base de données 8, vous exécuteriez la commande suivante:

  1. move key_1 8

move renverra OK si le déplacement de la clé a été réussi.

Suppression de clés

Pour supprimer une ou plusieurs clés de n’importe quel type de données, utilisez la commande del suivie d’une ou plusieurs clés que vous souhaitez supprimer:

  1. del key_1 key_2

Si cette commande supprime la ou les clés avec succès, elle renverra (integer) 1. Sinon, elle renverra (integer) 0.

La commande unlink effectue une fonction similaire à del, avec la différence que del bloque le client pendant que le serveur récupère la mémoire occupée par la clé. Si la clé en cours de suppression est associée à un petit objet, le temps nécessaire à del pour récupérer la mémoire est très court et le temps de blocage peut même ne pas être perceptible.

Cependant, cela peut devenir gênant si, par exemple, la clé que vous supprimez est associée à de nombreux objets, tels qu’une table de hachage avec des milliers ou des millions de champs. Supprimer une telle clé peut prendre un temps perceptiblement long, et vous serez bloqué pour effectuer d’autres opérations jusqu’à ce qu’elle soit entièrement supprimée de la mémoire du serveur.

unlink, cependant, détermine d’abord le coût de la désallocation de la mémoire occupée par la clé. Si celui-ci est faible, alors unlink fonctionne de la même manière que del en supprimant immédiatement la clé tout en bloquant également le client. Cependant, s’il y a un coût élevé pour désallouer la mémoire d’une clé, unlink supprimera la clé de manière asynchrone en créant un autre thread et en récupérant progressivement la mémoire en arrière-plan sans bloquer le client :

  1. unlink key_1

Comme il s’exécute en arrière-plan, il est généralement recommandé d’utiliser unlink pour supprimer les clés de votre serveur afin de réduire les erreurs sur vos clients, bien que del suffira également dans de nombreux cas.

Avertissement : Les deux commandes suivantes sont considérées comme dangereuses. Les commandes flushdb et flushall supprimeront de manière irréversible toutes les clés dans une seule base de données et toutes les clés dans chaque base de données sur le serveur Redis, respectivement. Il est recommandé de n’exécuter ces commandes que si vous êtes absolument certain de vouloir supprimer toutes les clés de votre base de données ou de votre serveur.

Il pourrait être dans votre intérêt de renommer ces commandes en quelque chose avec une probabilité plus faible d’être exécuté accidentellement.

Pour supprimer toutes les clés de la base de données sélectionnée, utilisez la commande flushdb:

  1. flushdb

Pour supprimer toutes les clés de chaque base de données sur un serveur Redis (y compris la base de données actuellement sélectionnée), exécutez flushall:

  1. flushall

À la fois flushdb et flushall acceptent l’option async, ce qui vous permet de supprimer toutes les clés d’une seule base de données ou de chaque base de données dans le cluster de manière asynchrone. Cela leur permet de fonctionner de manière similaire à la commande unlink, et ils créeront un nouveau thread pour libérer progressivement la mémoire en arrière-plan.

Sauvegarde de votre base de données

Pour créer une sauvegarde de la base de données actuellement sélectionnée, vous pouvez utiliser la commande save:

  1. save

Cela exportera un instantané de l’ensemble de données actuel sous forme d’un fichier .rdb, qui est un fichier de sauvegarde de base de données contenant les données dans un format de sérialisation interne et compressé.

save s’exécute de manière synchrone et bloquera tout autre client connecté à la base de données. Par conséquent, la documentation de la commande save recommande que cette commande ne soit presque jamais exécutée dans un environnement de production. À la place, il est suggéré d’utiliser la commande bgsave. Cela indique à Redis de bifurquer la base de données : le processus parent continuera de servir les clients tandis que le processus enfant enregistre la base de données avant de se terminer:

  1. bgsave

Notez que si les clients ajoutent ou modifient des données pendant que l’opération bgsave est en cours, ces modifications ne seront pas capturées dans le cliché instantané.

Vous pouvez également modifier le fichier de configuration Redis pour que Redis enregistre automatiquement un cliché instantané (appelé snapshotting ou mode RDB) après un certain laps de temps si un nombre minimum de modifications ont été apportées à la base de données. Cela est connu sous le nom de point de sauvegarde. Les paramètres suivants de point de sauvegarde sont activés par défaut dans le fichier redis.conf:

/etc/redis/redis.conf
. . .
save 900 1
save 300 10
save 60 10000
. . .
dbfilename "nextfile.rdb"
. . .

Avec ces paramètres, Redis exportera un cliché instantané de la base de données vers le fichier défini par le paramètre dbfilename toutes les 900 secondes si au moins une clé est modifiée, toutes les 300 secondes si au moins 10 clés sont modifiées, et toutes les 60 secondes si au moins 10000 clés sont modifiées.

Vous pouvez utiliser la commande shutdown pour sauvegarder vos données Redis, puis fermer votre connexion. Cette commande bloquera tous les clients connectés à la base de données, puis effectuera une opération save si au moins un point de sauvegarde est configuré, ce qui signifie qu’elle exportera la base de données dans son état actuel vers un fichier .rdb tout en empêchant les clients d’apporter des modifications.

De plus, la commande shutdown va vider les modifications du fichier en mode ajout de Redis avant de quitter si le mode ajout seulement est activé. Le mode fichier en mode ajout seulement (AOF) consiste à créer un journal de chaque opération d’écriture sur le serveur dans un fichier se terminant par .aof après chaque instantané. Les modes AOF et RDB peuvent être activés sur le même serveur, et utiliser les deux méthodes de persistance est un moyen efficace de sauvegarder vos données.

En résumé, la commande shutdown est essentiellement une commande save bloquante qui vide également toutes les modifications récentes du fichier en mode ajout seulement et ferme la connexion à l’instance Redis :

Avertissement : La commande shutdown est considérée comme dangereuse. En bloquant les clients de votre serveur Redis, vous pouvez rendre vos données indisponibles aux utilisateurs et aux applications qui en dépendent. Il est recommandé de n’exécuter cette commande que si vous testez le comportement de Redis ou si vous êtes absolument certain de vouloir bloquer tous les clients de votre serveur Redis.

En fait, il peut être dans votre intérêt de renommer cette commande pour quelque chose avec une probabilité moindre d’être exécutée accidentellement.

  1. shutdown

Si vous n’avez pas configuré de points de sauvegarde mais que vous souhaitez toujours que Redis effectue une opération save, ajoutez l’option save à la commande shutdown:

  1. shutdown save

Si vous avez configuré au moins un point de sauvegarde mais que vous voulez arrêter le serveur Redis sans effectuer de sauvegarde, vous pouvez ajouter l’argument nosave à la commande :

  1. shutdown nosave

Notez que le fichier à ajout uniquement peut devenir très long avec le temps, mais vous pouvez configurer Redis pour réécrire le fichier en fonction de certaines variables en éditant le fichier redis.conf. Vous pouvez également indiquer à Redis de réécrire le fichier d’ajout uniquement en exécutant la commande bgrewriteaof :

  1. bgrewriteaof

bgrewriteaof créera le plus court ensemble de commandes nécessaire pour ramener la base de données à son état actuel. Comme son nom l’indique, cette commande s’exécutera en arrière-plan. Cependant, si une autre commande de persistance est déjà en cours d’exécution dans un processus en arrière-plan, cette commande doit se terminer avant que Redis n’exécute bgrewriteaof.

Conclusion

Ce guide détaille un certain nombre de commandes utilisées pour gérer les bases de données et les clés. Si vous souhaitez en apprendre davantage sur d’autres commandes, arguments ou procédures connexes dans ce guide, veuillez demander ou faire des suggestions dans les commentaires.

Pour plus d’informations sur les commandes Redis, consultez notre série de tutoriels sur Comment Gérer une Base de Données Redis.

Source:
https://www.digitalocean.com/community/cheatsheets/how-to-manage-redis-databases-and-keys