Cuando intento lo anterior, aparece el siguiente error (error) LOADING Redis is loading the dataset in memory. ¿Puedes especificar por qué?
Ram Patra
44
@Ramswaroop: reinició Redis y actualmente está cargando datos del almacenamiento persistente. Mientras este proceso (carga) está activo, no puede manipular la base de datos. Espere a que termine o configure Redis sin persistencia y reinícielo (comenzará vacío, por lo que no necesitará hacer FLUSHALL una vez que esté activo).
Itamar Haber
@ItamarHaber Gracias por la ayuda, yo también descubrí lo mismo.
Ram Patra
1
@Neo si no tiene una biblioteca de cliente redis en C #, simplemente puede ejecutar ese comando, así: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian
2
Utilice el -hindicador para especificar una ubicación de servidor Redis
Adam F
194
Atención que FLUSHALLpuede ser exagerado. FLUSHDBes el único para vaciar una base de datos. FLUSHALLeliminará todo el servidor. Como en todas las bases de datos en el servidor. Dado que la pregunta era sobre vaciar una base de datos, creo que esta es una distinción lo suficientemente importante como para merecer una respuesta por separado.
+1 de mi parte, pensé que esta era la mejor respuesta en realidad. De acuerdo, la pregunta del OP dice "borrar todo", pero luego sigue "dame una base de datos en blanco", independientemente de lo que realmente quiso decir, creo que la distinción que hiciste es útil, por decir lo menos.
doug el
28
Las respuestas hasta ahora son absolutamente correctas; ellos eliminan todas las claves.
Sin embargo, si también desea eliminar todos los scripts de Lua de la instancia de Redis, debe seguirlo:
No, hizo una pregunta y en los dos años transcurridos desde entonces, el alcance en Redis aumentó. La pregunta del OP fue específicamente sobre la eliminación de claves. Estás respondiendo una pregunta diferente a esta.
The Real Bill
15
@TheRealBill Tienes que pensar en lo que es útil para los lectores SO actuales y futuros. Las respuestas aquí no abordaron de la OP I want everything wiped out and give me a blank database.pregunta más . Entonces, en mi humilde opinión, mi adición es buena, lo que ha ayudado a algunas personas. Siéntase libre de estar en desacuerdo por supuesto, de eso se trata SO.
Tw Bert
2
El contexto lo es todo, y la primera oración lo establece: "Quiero eliminar todas las claves". Reescribir la pregunta para dar una respuesta diferente no es de lo que me han dicho SO. Se trata de hacer la pregunta dada, de ahí que el indicador de moderación que indica que la respuesta en revisión está respondiendo una pregunta diferente. Pero las opiniones difieren.
The Real Bill
Si está ejecutando el servidor de usted mismo, la forma más rápida para limpiar todo es para matar el servidor y reiniciarlo (lo descubrió accidentalmente)
acutesoftware
18
FLUSHALL
Eliminar todas las claves de todas las bases de datos
FLUSHDB
Eliminar todas las claves de la base de datos actual
SCRIPT FLUSH
Elimina todos los scripts de la caché de scripts.
En nuestras bases de datos de producción y preproducción hay miles de claves. De vez en cuando necesitamos eliminar algunas claves (mediante alguna máscara), modificarlas según algunos criterios, etc. Por supuesto, no hay forma de hacerlo manualmente desde la CLI, especialmente si se tiene fragmentación (512 dbs lógicos en cada físico).
Para este propósito, escribo la herramienta de cliente java que hace todo este trabajo. En caso de eliminación de claves, la utilidad puede ser muy simple, solo hay 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 paso más de 5-10 minutos.
FLUSHALL elimina todas las claves de todas las bases de datos existentes. Para Redis versión> 4.0, se admite FLUSHALL ASYNC que se ejecuta en un subproceso en segundo plano sin bloquear el servidor
https://redis.io/commands/flushall
Puede usar FLUSHALL que eliminará todas las claves de cada una de sus bases de datos. Donde como FLUSHDB borrará todas las claves de nuestra base de datos actual.
En mi experiencia, si tiene persistencia, debería seguir este procedimiento + eliminar también cualquier archivo .aof + emitir redis-cli flushall, para eliminar realmente todo.
ywarnier
4
Úselo FLUSHALL ASYNCsi usa (Redis 4.0.0 o superior) más FLUSHALL.
Aunque su publicación puede responder la pregunta, carece de documentación. Edite su respuesta y proporciónela.
hola
2
Creo que a veces detengo el servidor redis y borro rdb, algunos archivos, asegurándome de que no se puedan volver a cargar datos. luego inicie el servidor redis, ahora es nuevo y está vacío.
Después de iniciar el servidor Redis con: service redis-server start --port 8000o redis-server.
Utilícelo redis-cli -p 8000para conectarse al servidor como cliente en un terminal diferente.
Puedes usar cualquiera
FLUSHDB : elimina todas las claves del DB actualmente seleccionado. Este comando nunca falla. La complejidad temporal para esta operación es O (N), N es el número de claves en la base de datos.
FLUSHALL : elimine todas las claves de todas las bases de datos existentes, no solo la seleccionada actualmente. Este comando nunca falla. La complejidad temporal para esta operación es O (N), siendo N el número de claves en todas las bases de datos existentes.
Consulte la documentación para la opción ASYNC para ambos.
Si está utilizando Redis a través de su interfaz de Python, use estas dos funciones para la misma funcionalidad:
def flushall(self):
"Delete all keys in all databases on the current host"
return self.execute_command('FLUSHALL')
y
def flushdb(self):
"Delete all keys in the current database"
return self.execute_command('FLUSHDB')
Es mejor si puede tener RDM (Redis Desktop Manager). Puede conectarse a su servidor redis creando una nueva conexión en RDM.
Una vez que está conectado, puede verificar los datos en vivo, también puede jugar con cualquier comando redis.
Abrir un cli en RDM.
1) Haga clic derecho en la conexión, verá una opción de consola, solo haga clic en ella y se abrirá una nueva ventana de consola en la parte inferior de RDM.
Volviendo a su pregunta FLUSHALL es el comando, simplemente puede escribir FLUSHALL en el redis cli.
Además, si desea conocer cualquier comando de redis y su uso adecuado, vaya al enlace a continuación.
https://redis.io/commands .
Hay diferentes enfoques. Si desea hacer esto desde remoto, emita flushall a esa instancia, a través de la herramienta de línea de comandos redis-cli o cualquier herramienta, es decir, telnet, un SDK de lenguaje de programación. O simplemente inicie sesión en ese servidor, elimine el proceso, elimine su archivo dump.rdb y appendonly.aof (realice una copia de seguridad antes de eliminarlo).
Si está utilizando Java , a partir de la documentación, puede utilizar cualquiera de ellos según su caso de uso.
/**
* Remove all keys from all databases.
*
* @return String simple-string-reply
*/
String flushall();
/**
* Remove all keys asynchronously from all databases.
*
* @return String simple-string-reply
*/
String flushallAsync();
/**
* Remove all keys from the current database.
*
* @return String simple-string-reply
*/
String flushdb();
/**
* Remove all keys asynchronously from the current database.
*
* @return String simple-string-reply
*/
String flushdbAsync();
Código:
RedisAdvancedClusterCommands syncCommands = // get sync() or async() commands
syncCommands.flushdb();
del *
no funciona. Devuelve 0.Respuestas:
Con redis-cli:
Por ejemplo, en su shell:
fuente
(error) LOADING Redis is loading the dataset in memory
. ¿Puedes especificar por qué?(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
indicador para especificar una ubicación de servidor RedisAtención que
FLUSHALL
puede ser exagerado.FLUSHDB
es el único para vaciar una base de datos.FLUSHALL
eliminará todo el servidor. Como en todas las bases de datos en el servidor. Dado que la pregunta era sobre vaciar una base de datos, creo que esta es una distinción lo suficientemente importante como para merecer una respuesta por separado.fuente
Las respuestas hasta ahora son absolutamente correctas; ellos eliminan todas las claves.
Sin embargo, si también desea eliminar todos los scripts de Lua de la instancia de Redis, debe seguirlo:
SCRIPT FLUSH
El OP hace dos preguntas; Esto completa la segunda pregunta ( todo borrado).
fuente
I want everything wiped out and give me a blank database.
pregunta más . Entonces, en mi humilde opinión, mi adición es buena, lo que ha ayudado a algunas personas. Siéntase libre de estar en desacuerdo por supuesto, de eso se trata SO.FLUSHALL Eliminar todas las claves de todas las bases de datos
FLUSHDB Eliminar todas las claves de la base de datos actual
SCRIPT FLUSH Elimina todos los scripts de la caché de scripts.
fuente
Si está utilizando la gema redis-rb, simplemente puede llamar:
fuente
Este método funcionó para mí: elimine todo de la base de datos conectada actual en su clúster Jedis.
fuente
Una opción más de mi lado:
En nuestras bases de datos de producción y preproducción hay miles de claves. De vez en cuando necesitamos eliminar algunas claves (mediante alguna máscara), modificarlas según algunos criterios, etc. Por supuesto, no hay forma de hacerlo manualmente desde la CLI, especialmente si se tiene fragmentación (512 dbs lógicos en cada físico).
Para este propósito, escribo la herramienta de cliente java que hace todo este trabajo. En caso de eliminación de claves, la utilidad puede ser muy simple, solo hay una clase allí:
Escribir este tipo de herramientas me parece muy fácil y no paso más de 5-10 minutos.
fuente
FLUSHALL elimina todas las claves de todas las bases de datos existentes. Para Redis versión> 4.0, se admite FLUSHALL ASYNC que se ejecuta en un subproceso en segundo plano sin bloquear el servidor https://redis.io/commands/flushall
FLUSHDB: elimina todas las claves de la base de datos seleccionada. https://redis.io/commands/flushdb
La complejidad de tiempo para realizar las operaciones será O (N) donde N es el número de claves en la base de datos.
La respuesta del redis será una cadena simple "OK"
fuente
Puede usar FLUSHALL que eliminará todas las claves de cada una de sus bases de datos. Donde como FLUSHDB borrará todas las claves de nuestra base de datos actual.
fuente
fuente
Úselo
FLUSHALL ASYNC
si usa (Redis 4.0.0 o superior) másFLUSHALL
.https://redis.io/commands/flushall
Nota : Todo antes de ejecutar
FLUSHALL ASYNC
será desalojado. Los cambios realizados durante la ejecución noFLUSHALL ASYNC
se verán afectados.fuente
Abra redis-cli y escriba:
fuente
Creo que a veces detengo el servidor redis y borro rdb, algunos archivos, asegurándome de que no se puedan volver a cargar datos. luego inicie el servidor redis, ahora es nuevo y está vacío.
fuente
redis-cli -h <host> -p <port> flushall
Eliminará todos los datos del cliente conectado (con el host y el puerto)
fuente
Después de iniciar el servidor Redis con:
service redis-server start --port 8000
oredis-server
.Utilícelo
redis-cli -p 8000
para conectarse al servidor como cliente en un terminal diferente.Puedes usar cualquiera
Consulte la documentación para la opción ASYNC para ambos.
Si está utilizando Redis a través de su interfaz de Python, use estas dos funciones para la misma funcionalidad:
y
fuente
Sus preguntas parecen ser sobre la eliminación de claves completas en una base de datos. En este caso deberías probar:
redis-cli
(si se ejecuta en el puerto 6379), de lo contrario también deberá especificar el número de puerto.select {Index}
)flushdb
Si desea vaciar claves en todas las bases de datos, entonces debería intentarlo
flushall
.fuente
Un clic en FastoRedis / FastoNoSQL
fuente
Puedes usar
FLUSHDB
p.ej
Lista de bases de datos:
Lista de claves
Agregar un valor a una clave
Crea otra clave con dos valores
Listar todos los valores en clave2
Hacer FLUSHDB
Lista de claves y bases de datos
fuente
puedes usar el siguiente enfoque en python
fuente
Es mejor si puede tener RDM (Redis Desktop Manager). Puede conectarse a su servidor redis creando una nueva conexión en RDM.
Una vez que está conectado, puede verificar los datos en vivo, también puede jugar con cualquier comando redis.
Abrir un cli en RDM.
1) Haga clic derecho en la conexión, verá una opción de consola, solo haga clic en ella y se abrirá una nueva ventana de consola en la parte inferior de RDM.
Volviendo a su pregunta FLUSHALL es el comando, simplemente puede escribir FLUSHALL en el redis cli.
Además, si desea conocer cualquier comando de redis y su uso adecuado, vaya al enlace a continuación. https://redis.io/commands .
fuente
Hay diferentes enfoques. Si desea hacer esto desde remoto, emita flushall a esa instancia, a través de la herramienta de línea de comandos redis-cli o cualquier herramienta, es decir, telnet, un SDK de lenguaje de programación. O simplemente inicie sesión en ese servidor, elimine el proceso, elimine su archivo dump.rdb y appendonly.aof (realice una copia de seguridad antes de eliminarlo).
fuente
Si está utilizando Java , a partir de la documentación, puede utilizar cualquiera de ellos según su caso de uso.
Código:
Leer más: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster
fuente