Supprimer tout dans Redis

1. Vue d'ensemble

Lors de la mise en cache dans Redis, il peut être utile de vider tout le cache lorsqu'il devient invalide.

Dans ce court didacticiel, nous allons apprendre à supprimer toutes les clés présentes dans Redis, à la fois dans des bases de données spécifiques et dans toutes les bases de données.

Tout d'abord, nous allons examiner la ligne de commande. Ensuite, nous verrons comment accomplir la même chose en utilisant les API et le client Java.

2. Exécution de Redis

Nous aurons besoin d'une installation de Redis pour travailler avec. Il existe des instructions d'installation pour Mac et Linux dans le guide de démarrage rapide de Redis. Il est probablement plus facile d'exécuter Redis dans Docker.

Commençons un test du serveur Redis:

docker run --name redis -p 6379:6379 -d redis:latest

Et, nous pouvons exécuter redis-cli pour tester que ce serveur fonctionne:

docker exec -it redis redis-cli

Cela nous amène dans le shell cli, où la commande ping testera si le serveur est en marche:

127.0.0.1:6379> ping PONG

Nous quittons le redis-cli avec CTRL + C.

3. Commandes Redis

Commençons par les commandes Redis pour tout supprimer.

Il existe deux commandes principales pour supprimer les clés présentes dans Redis: FLUSHDB et FLUSHALL . Nous pouvons utiliser la CLI Redis pour exécuter ces commandes.

La commande FLUSHDB supprime les clés d'une base de données. Et la commande FLUSHALL supprime toutes les clés de toutes les bases de données.

Nous pouvons exécuter ces opérations dans un thread d'arrière-plan en utilisant l' option ASYNC . Ceci est utile si le vidage prend beaucoup de temps, car l' exécution de la commande ASYNC l' empêche de se bloquer jusqu'à ce qu'il soit terminé.

Il faut noter que l' option ASYNC est disponible à partir de Redis 4.0.0.

4. Utilisation du client Java

Voyons maintenant comment utiliser le client Jedis Java pour supprimer des clés.

4.1. Dépendances

Tout d'abord, nous devrons ajouter la dépendance Maven pour Jedis:

 redis.clients jedis 3.3.0 

Pour faciliter les tests, utilisons également un serveur Redis intégré:

 com.github.kstyrc embedded-redis 0.6 

4.2. Démarrage d'un Redis intégré

Nous allons créer un serveur Redis intégré pour tester, en l'exécutant sur un port disponible:

RedisService redisServer = new RedisServer(port);

Notre client Jedis est alors créé avec localhost comme nom d'hôte, et le même port:

Jedis jedis = new Jedis("localhost", port);

5. Purger une seule base de données

Mettons quelques données dans la base de données et vérifions qu'elles sont mémorisées:

String key = "key"; String value = "value"; jedis.set(key, value); String received = jedis.get(key); assertEquals(value, received);

Maintenant, vidons la base de données à l'aide de la méthode flushDB :

jedis.flushDB(); assertNull(jedis.get(key));

Comme nous pouvons le voir, tenter de récupérer la valeur après le vidage retourne null .

6. Effacement de toutes les bases de données

Redis fournit plusieurs bases de données, qui sont numérotées. Nous pouvons ajouter des données à différentes bases de données en utilisant la commande select avant d'ajouter nos valeurs:

jedis.select(0); jedis.set("key1", "value1"); jedis.select(1); jedis.set("key2", "value2");

Nous devrions maintenant avoir une clé dans chacune de nos deux bases de données:

jedis.select(0); assertEquals("value1", jedis.get("key1")); assertNull(jedis.get("key2")); jedis.select(1); assertEquals("value2", jedis.get("key2")); assertNull(jedis.get("key1"));

La méthode flushDB effacera uniquement la base de données actuelle . Afin d'effacer toutes les bases de données, nous utilisons la méthode flushAll :

jedis.flushAll();

Nous pouvons tester que cela a fonctionné:

jedis.select(0); assertNull(jedis.get("key1")); assertNull(jedis.get("key2")); jedis.select(1); assertNull(jedis.get("key1")); assertNull(jedis.get("key2"));

7. Complexité temporelle

Redis est un magasin de données rapide qui évolue bien. Cependant, les opérations de vidage peuvent prendre plus de temps lorsqu'il y a plus de données.

La complexité temporelle de l' opération FLUSHDB est O (N) , où N est le nombre de clés dans la base de données. Si nous utilisons la commande FLUSHALL , la complexité temporelle est à nouveau O (N) , mais ici, N est le nombre de clés dans toutes les bases de données.

8. Conclusion

Dans cet article, nous avons vu comment exécuter Redis et le redis-cli dans Docker, et comment utiliser le client Jedis pour Java avec un serveur Redis intégré.

Nous avons vu comment conserver les données dans différentes bases de données Redis et comment utiliser les commandes flush pour effacer une ou plusieurs d'entre elles.

Comme toujours, le code source de cet article est disponible à l'adresse over sur GitHub.