Question Comment supprimer tout dans Redis?


Je veux supprimer toutes les clés. Je veux tout effacer et me donner une base de données vide.

Y at-il un moyen de le faire dans Redis client?


590
2017-07-27 22:15


origine


Réponses:


Avec redis-cli:

  • FLUSHDB - Supprime les données de la base de données CURRENT de votre connexion.
  • FLUSHALL - Supprime les données de TOUTES les bases de données.

Documentation Redis:

Par exemple, dans votre shell:

redis-cli flushall

998
2017-07-27 22:17



Heads up que FLUSHALL peut être exagéré. FLUSHDB est celui pour vider une base de données seulement. FLUSHALL effacera le serveur entier. Comme dans toutes les bases de données sur le serveur. Puisque la question portait sur la vidange d'une base de données, je pense que c'est une distinction assez importante pour mériter une réponse distincte.


171
2017-07-28 23:01



Les réponses jusqu'à présent sont absolument correctes; ils suppriment toutes les clés.

Cependant, si vous voulez également tout supprimer Lua scripts de l'instance Redis, vous devriez le suivre en:

SCRIPT FLUSH

Le PO pose deux questions; ceci complète la deuxième question (tout essuyé).


25
2018-01-26 22:18



Si vous utilisez la gemme redis-rb, vous pouvez simplement appeler:

your_redis_client.flushdb

14
2018-02-25 13:56



FLUSHALL  Supprimer toutes les clés de toutes les bases de données

FLUSHDB  Supprimer toutes les clés de la base de données en cours

SCRIPT FLUSH  Supprime tous les scripts du cache de script.


9
2017-10-16 10:56



Cette méthode a fonctionné pour moi - supprimer tout de la base de données connectée actuelle sur votre cluster Jedis.

public static void resetRedis() {
    jedisCluster = RedisManager.getJedis(); // your JedisCluster instance

    for (JedisPool pool : jedisCluster.getClusterNodes().values()) {

        try (Jedis jedis = pool.getResource()) {
            jedis.flushAll();
        }
        catch (Exception ex){
            System.out.println(ex.getMessage());
        }
    }

}

7
2017-11-09 11:14



Une option de plus de mon côté:

Dans nos bases de données de production et de pré-production, il y a des milliers de clés. De temps en temps, nous devons supprimer certaines clés (par un masque), les modifier selon certains critères, etc. Bien sûr, il n'y a aucun moyen de le faire manuellement à partir de CLI, en particulier avec sharding (512 dbs logiques dans chaque physique).

Pour ce faire, j'écris un outil client Java qui fait tout ce travail. En cas de suppression de clés, l'utilitaire peut être très simple, il n'y a qu'une seule classe:

public class DataCleaner {

    public static void main(String args[]) {
        String keyPattern = args[0];
        String host = args[1];
        int port = Integer.valueOf(args[2]);
        int dbIndex = Integer.valueOf(args[3]);

        Jedis jedis = new Jedis(host, port);

        int deletedKeysNumber = 0;
        if(dbIndex >= 0){
            deletedKeysNumber += deleteDataFromDB(jedis, keyPattern, dbIndex);
        } else {
            int dbSize = Integer.valueOf(jedis.configGet("databases").get(1));
            for(int i = 0; i < dbSize; i++){
                deletedKeysNumber += deleteDataFromDB(jedis, keyPattern, i);
            }
        }

        if(deletedKeysNumber == 0) {
            System.out.println("There is no keys with key pattern: " + keyPattern + " was found in database with host: " + host);
        }
    }

    private static int deleteDataFromDB(Jedis jedis, String keyPattern, int dbIndex) {
        jedis.select(dbIndex);
        Set<String> keys = jedis.keys(keyPattern);
        for(String key : keys){
            jedis.del(key);
            System.out.println("The key: " + key + " has been deleted from database index: " + dbIndex);
        }

        return keys.size();
    }

}

En écrivant ce genre d'outils je trouve très facile et ne dépense pas plus de 5-10 min.


5
2017-09-01 18:44