Eliminar todo en Redis

1. Información general

Al almacenar en caché en Redis, puede ser útil borrar todo el caché cuando deja de ser válido.

En este breve tutorial, aprenderemos cómo eliminar todas las claves presentes en Redis, tanto en bases de datos específicas como en todas las bases de datos.

Primero, veremos la línea de comando. Luego, veremos cómo lograr lo mismo usando las API y el cliente Java.

2. Ejecutando Redis

Necesitaremos una instalación de Redis para trabajar. Hay instrucciones de instalación para Mac y Linux en la guía de inicio rápido de Redis. Probablemente sea más fácil ejecutar Redis en la ventana acoplable.

Comencemos un servidor Redis de prueba:

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

Y podemos ejecutar redis-cli para probar que este servidor está funcionando:

docker exec -it redis redis-cli

Esto nos lleva al shell cli, donde el comando ping probará si el servidor está activo:

127.0.0.1:6379> ping PONG

Salimos de redis-cli con CTRL + C.

3. Comandos de Redis

Comencemos con los comandos de Redis para eliminar todo.

Hay dos comandos principales para eliminar las claves presentes en Redis: FLUSHDB y FLUSHALL . Podemos usar la CLI de Redis para ejecutar estos comandos.

El comando FLUSHDB elimina las claves en una base de datos. Y el comando FLUSHALL borra todas las claves en todas las bases de datos.

Podemos ejecutar estas operaciones en un hilo de fondo usando la opción ASYNC . Esto es útil si la descarga lleva mucho tiempo, ya que hacer el comando ASYNC evita que se bloquee hasta que se complete.

Debemos tener en cuenta que la opción ASYNC está disponible en Redis 4.0.0.

4. Trabajar con el cliente Java

Ahora, veamos cómo usar el cliente Jedis Java para eliminar claves.

4.1. Dependencias

Primero, necesitaremos agregar la dependencia de Maven para Jedis:

 redis.clients jedis 3.3.0 

Para facilitar las pruebas, usemos también un servidor Redis integrado:

 com.github.kstyrc embedded-redis 0.6 

4.2. Iniciar un Redis integrado

Crearemos un servidor Redis integrado para probar, ejecutándolo en un puerto disponible:

RedisService redisServer = new RedisServer(port);

Luego, nuestro cliente Jedis se crea con localhost como nombre de host y el mismo puerto:

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

5. Vaciado de una única base de datos

Pongamos algunos datos en la base de datos y verifiquemos que se recuerden:

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

Ahora vamos a vaciar la base de datos usando el método flushDB :

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

Como podemos ver, intentar recuperar el valor después de vaciar devuelve nulo .

6. Borrar todas las bases de datos

Redis proporciona varias bases de datos, que están numeradas. Podemos agregar datos a diferentes bases de datos usando el comando select antes de agregar nuestros valores:

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

Ahora deberíamos tener una clave en cada una de nuestras dos bases de datos:

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

El método flushDB solo borrará la base de datos actual . Para borrar todas las bases de datos, usamos el método flushAll :

jedis.flushAll();

Podemos probar que esto ha funcionado:

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

7. Complejidad del tiempo

Redis es un almacén de datos rápido que escala bien. Sin embargo, las operaciones de descarga pueden tardar más cuando hay más datos.

La complejidad de tiempo de la operación FLUSHDB es O (N) , donde N es el número de claves en la base de datos. Si usamos el comando FLUSHALL , la complejidad del tiempo es nuevamente O (N) , pero aquí, N es el número de claves en todas las bases de datos.

8. Conclusión

En este artículo, vimos cómo ejecutar Redis y redis-cli en Docker, y cómo usar el cliente Jedis para Java con un servidor Redis integrado.

Vimos cómo mantener los datos en diferentes bases de datos de Redis y cómo usar los comandos flush para borrar uno o más de ellos.

Como siempre, el código fuente de este artículo está disponible en GitHub.