Pregunta ¿Cómo borro todo en Redis?


Quiero borrar todas las llaves Quiero borrar todo y darme una base de datos en blanco.

¿Hay alguna manera de hacer esto en Redis ¿cliente?


590
2017-07-27 22:15


origen


Respuestas:


Con redis-cli:

  • FLUSHDB - Elimina datos de la base de datos CURRENT de su conexión.
  • FLUSHALL - Elimina datos de TODAS las bases de datos.

Documentación de Redis:

Por ejemplo, en tu caparazón:

redis-cli flushall

998
2017-07-27 22:17



Encabeza eso FLUSHALL puede ser exagerado FLUSHDB es quien limpia una base de datos solamente. FLUSHALL borrará todo el servidor. Como en cada base de datos en el servidor. Dado que la pregunta era sobre el lavado de una base de datos, creo que esta es una distinción lo suficientemente importante como para merecer una respuesta por separado.


171
2017-07-28 23:01



Las respuestas hasta ahora son absolutamente correctas; eliminan todas las llaves

Sin embargo, si también quieres eliminar todo Lua scripts de la instancia de Redis, debe seguirlos de la siguiente manera:

SCRIPT FLUSH

El OP hace dos preguntas; esto completa la segunda pregunta (todo limpiado).


25
2018-01-26 22:18



Si está utilizando la gema redis-rb, simplemente puede llamar a:

your_redis_client.flushdb

14
2018-02-25 13:56



FLUSHALL  Eliminar todas las claves de todas las bases de datos

FLUSHDB  Eliminar todas las claves de la base de datos actual

SCRIPT FLUSH  Elimine todos los scripts de la memoria caché de script.


9
2017-10-16 10:56



Este método funcionó para mí: borre todo de la base de datos conectada actual en su clúster 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



Una opción más de mi lado:

En nuestras bases de datos de producción y preproducción, existen miles de claves. De vez en cuando tenemos que eliminar algunas teclas (mediante alguna máscara), modificarlas según algunos criterios, etc. Por supuesto, no hay forma de hacerlo manualmente desde la CLI, especialmente si tiene fragmentación (512 dbps lógicos en cada elemento físico).

Para este propósito, escribo una herramienta de cliente java que hace todo este trabajo. En caso de eliminación de teclas, la utilidad puede ser muy simple, solo una clase allí:

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();
    }

}

Escribir este tipo de herramientas me parece muy fácil y no gasto más de 5-10 min.


5
2017-09-01 18:44