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.