Blog

Mejorar el rendimiento de la base de datos con Redis

Contenidos

Antes de entrar de lleno en Redis, vamos a alejarnos un poco y entender los fundamentos del almacenamiento en caché de las bases de datos. Un sistema de base de datos relacional diseñado sin caché funciona de la siguiente manera:

  • Un usuario envía una solicitud al servidor.
  • El servidor consulta la base de datos para obtener los datos pertinentes.
  • La base de datos recupera y envía los datos al servidor.

Para optimizar este sistema, se pueden escribir mejores consultas que mejoren el rendimiento. Sin embargo, esto no ayuda cuando se trata de escalar la aplicación para miles de usuarios.

¿Qué es una base de datos con caché y cómo funciona?

Veamos cómo funciona un sistema de base de datos con caché.

Una caché de base de datos ayuda a tu servidor a obtener datos lo más rápidamente posible sin consultar la base de datos. Si los datos no están presentes en la caché, sólo entonces se consultará la base de datos. Una vez que los datos se sirven al usuario, el siguiente paso es actualizar la caché para futuras peticiones. La caché es útil en dos situaciones:

  • Cuando se consultan datos de uso común, como perfiles de usuario, coordenadas geográficas, menús de restaurantes, etc. Este es el tipo de datos que los usuarios solicitan con mucha frecuencia. Mejorará el rendimiento si la última copia de estos datos está disponible en el servidor.
  • Mientras que la consulta frecuente de los mismos datos de la base de datos que implica cálculos complejos.

Redis: almacén de datos en memoria

Redis son las siglas de Remote Dictionary Server y está desarrollado en lenguaje de programación C. Esta es la razón principal por la que Redis es tan rápido. Según su documentación oficial:

Redis es un almacén de estructuras de datos en memoria de código abierto (con licencia BSD), utilizado como base de datos, caché y message broker.

Redis: Soporte de lenguajes

Redis soporta un gran número de lenguajes de programación con una enorme lista de clientes de Redis (mencionados entre paréntesis a continuación) Algunos de los más populares pueden ser listados como

  • C (hiredis, hiredis-vip)
  • C# (Redis, StackExchange.Redis)
  • C++ (acl-redis)
  • Java (Jedis, lettuce)
  • Python (redis-py)
  • js (ioredis, node_redis)
  • PL/SQL (oredis)
  • PHP (phpredis, Predis)
  • Perl
  • Swift (PSSRedisClient)
  • Scala (scala-redis)
  • Go (Radix)

Lo que hace a Redis tan popular como caché es su soporte para una plétora de tipos de datos como:

  • Strings
  • Hashes
  • Lists
  • Sets
  • Mapas de bits
  • Hyperlogs
  • Índices geoespaciales

Arquitectura de Redis: Una visión general

Una arquitectura de Redis de una sola instancia se compone de:

  • Cliente de Redis
  • Servidor de Redis

Estos dos componentes pueden estar en el mismo ordenador. El servidor Redis se encarga de almacenar y gestionar los datos. El cliente Redis es la consola Redis o la API Redis de un lenguaje de programación. Como Redis almacena todo en la memoria RAM, es volátil y por lo tanto hay que asegurarse de que los datos son PERSISTENTES.

Persistencia de Redis

Redis puede hacerse persistente de las siguientes maneras:

  • Mecanismo RDB
  • AOF
  • SAVE

¿Cómo funciona Redis?

La caché de Redis almacena los datos en forma de pares clave-valor en un formato en memoria. Esto significa que Redis almacena los datos en la memoria primaria (RAM), lo que permite velocidades de lectura y escritura muy rápidas en comparación con las bases de datos relacionales que almacenan los datos en discos SSD o HDD. Al almacenar los datos en la memoria, Redis puede eliminar los retrasos en el tiempo de búsqueda. La clave tiene que ser una cadena, pero el valor puede ser cualquiera de los tipos de datos que admite, como cadenas, listas, etc. Ejemplo de pares clave-valor de Redis:

name=»john»

occupation=[«desarrollador», “diseñador»]

Aquí name y occupation son claves, con sus correspondientes valores de strings y de lista.

Ventajas de Redis

  • Reducir las llamadas de red a la base de datos

El ejemplo de un perfil de usuario de Twitter es un buen ejemplo, al que se accede con frecuencia. Se puede almacenar en caché y cada vez que un usuario consulte el servidor, se ahorrará una llamada de red a la base de datos, ya que los datos ya están almacenados en caché.

  • Reducir los reprocesamientos y la carga de la base de datos de varios servidores

Puede almacenar los resultados de los cálculos complejos de la base de datos en su caché para agilizar los tiempos de respuesta y reducir el reprocesamiento de la base de datos. Sin embargo, el factor más crítico para esto sería decidir qué cálculos son los más solicitados por los usuarios y almacenar sólo esos en la caché. 

  • Alta disponibilidad y escalabilidad

El diseño de un sistema basado en la caché reduce o distribuye el número de consultas que su base de datos debe manejar. De este modo, su servidor puede gestionar más peticiones simultáneas y reducir la carga de su base de datos.

  • Rendimiento

El rendimiento de su servidor se analiza en función de la rapidez con la que puede gestionar una solicitud. Con una caché situada entre el servidor y la base de datos, los tiempos de respuesta se reducen significativamente para los datos que ya están disponibles en la caché.

  • Comunidad de código abierto

Redis es de código abierto y cuenta con el apoyo de una gran comunidad. Por lo tanto, no hay bloqueo de proveedores ni barreras tecnológicas. Tiene un gran soporte para formatos de datos y lenguajes.

Casos de uso de Redis

Redis se puede utilizar para una multitud de cosas:

  • Almacenamiento en caché

Redis es excelente para el almacenamiento en caché debido a su alta velocidad de lectura y escritura que resulta de ser almacenado en la propia memoria primaria (en memoria). Redis tiene tiempos de respuesta de menos de un milisegundo y reduce enormemente la latencia y la carga de su base de datos RDMS/NoSQL tradicional.

  • Foros, salas de chat en vivo

Las salas de chat en vivo y los foros de mensajes dependen de un corredor de mensajes robusto y de alto rendimiento, que es donde Redis entra en juego. La compatibilidad de Redis con las estructuras de datos de lista y los hashes lo hace ideal para este caso de uso.

  • Tablas de clasificación de juegos en vivo

Los desarrolladores de juegos optan por una tabla de clasificación en vivo en el juego y Redis como su elección con la estructura de datos Sorted Set.

  • Streaming de medios de comunicación

Las empresas de streaming de medios de comunicación en línea como Netflix necesitan una caché extremadamente rápida para los metadatos, los historiales de visualización y las líneas de tiempo para que la experiencia del espectador sea extremadamente fluida. Redis hace posible que millones de usuarios transmitan el contenido de forma fluida y sin retrasos.

  • Machine learning

Las aplicaciones pertenecientes a las industrias de FinTech, Gaming y Publicidad que implementan técnicas de ML necesitan procesar grandes volúmenes de datos muy rápidamente. para entregar. El almacenamiento de datos en memoria de Redis ayuda a proporcionar información significativa en tiempo real.

  • Análisis en tiempo real

La velocidad de latencia de Redis, inferior a un milisegundo, ayuda a realizar análisis de datos en tiempo real para las redes sociales, la tecnología publicitaria, etc.

Política de la caché

¿Ponemos todo en la caché? No. Es una mala idea por dos razones:

  • El hardware utilizado para el almacenamiento en caché es caro y no es un hardware básico barato.
  • Si la caché tiene muchos datos, los tiempos de búsqueda aumentan. En su lugar, por qué no golpear la base de datos. La caché se vuelve contraproducente.

La caché debe tener la base de datos más relevante la predicción de lo que podría ser necesario pronto. La forma de decidir qué poner en la caché y qué desalojar de ella se llama Política de Caché.

Estrategias de almacenamiento en caché de la base de datos para diseñar su política de caché

Existen múltiples estrategias de almacenamiento en caché, que se basan predominantemente en diferentes casos de uso. Algunas de ellas son:

  • Cache-aside

En este caso, el servidor consulta primero la caché para obtener los datos. En caso de un ‘hit de caché’, los datos se recuperan. Si se trata de un ‘cache miss’ (los datos no están disponibles en la caché), se consulta la base de datos. Hay un paso adicional para utilizar los mismos datos para actualizar la caché para su uso futuro.

  • Lectura

En este caso, la caché se sitúa en línea entre el servidor y la base de datos. Todas las peticiones pasan únicamente por la caché. En caso de que se pierda el caché, éste se actualiza a sí mismo primero y luego envía los datos al servidor.

  • Escritura en la base de datos

Al igual que la estrategia de lectura, todas las escrituras pasan por la caché. De este modo, la caché siempre es coherente con la base de datos.

  • Write-back/Write-behind

Es similar a la escritura directa, con la única diferencia de que la caché no actualiza la base de datos en cada operación de escritura. En su lugar, actualiza la base de datos después de un periodo de tiempo determinado para reducir las llamadas a la red.

Artículos destacados

From offline to online.

Comparte tus ideas con nosotros