Bases de datos nosql

5.1. Configuración óptima de Redis y Memcached

🔹 Configurar el tamaño máximo de memoria
Redis y Memcached almacenan datos en RAM. Para evitar que ocupen demasiada memoria, es importante establecer un límite máximo de uso.

Configurar límite de memoria en Redis
En el archivo de configuración (redis.conf), establece el límite de memoria:

1maxmemory 256mb

También puedes establecerlo dinámicamente:

1CONFIG SET maxmemory 256mb

Configurar límite de memoria en Memcached
Al iniciar Memcached, define el límite de memoria en MB:

1memcached -m 256

Esto evita que la base de datos consuma demasiada RAM y afecte a otros procesos del sistema.


5.2. Manejo de expiración y eliminación automática de datos

🔹 ¿Por qué es importante la expiración de claves?
Si no se eliminan datos antiguos, la base de datos crecerá sin control y podría quedarse sin memoria. Para evitarlo, se usa la expiración automática de claves.

Configurar expiración en Redis
Para que un dato se elimine después de cierto tiempo, usa EX (segundos):

1SET usuario:1 "Carlos" EX 3600  # Expira en 1 hora

También puedes establecer una expiración después de insertar el dato:

1EXPIRE usuario:1 1800  # Expira en 30 minutos

Para verificar cuánto tiempo le queda a una clave antes de expirar:

1TTL usuario:1  # Devuelve el tiempo restante en segundos

Eliminar automáticamente claves en Redis
Redis ofrece varias estrategias para eliminar claves cuando se llena la memoria:

  • noeviction: No elimina claves y devuelve un error cuando la memoria está llena.
  • allkeys-lru: Elimina las claves menos usadas recientemente.
  • volatile-lru: Solo elimina claves con expiración.

Para configurar esto en redis.conf:

1maxmemory-policy allkeys-lru

5.3. Evitar problemas de sobrecarga de memoria

🔹 Errores comunes que pueden llenar la memoria
❌ Guardar demasiados datos sin expiración.
❌ No eliminar claves que ya no se usan.
❌ Usar Redis como base de datos principal en vez de caché.

Solución: Usar claves con expiración y liberar memoria

1EXPIRE producto:123 3600  # Expira en 1 hora
2DEL producto:123  # Borra manualmente la clave cuando ya no es necesaria

Comprobar cuánta memoria usa Redis

1INFO memory  # Muestra el uso actual de memoria

5.4. Seguridad en bases de datos clave-valor

🔹 Errores comunes de seguridad
❌ Exponer Redis o Memcached a Internet sin protección.
❌ No usar contraseñas.
❌ No limitar el acceso solo a ciertos servidores.

Proteger Redis con contraseña
1️⃣ Editar el archivo redis.conf:

1requirepass mi_contraseña_segura

2️⃣ Para conectarse con la contraseña:

1AUTH mi_contraseña_segura

Restringir el acceso a Redis solo desde localhost
En redis.conf, cambia:

1bind 127.0.0.1

Habilitar cifrado en Redis
Si Redis se usa en un entorno crítico, habilita TLS/SSL para cifrar las comunicaciones.


5.5. Escalabilidad y clustering

🔹 ¿Qué pasa cuando una base clave-valor crece demasiado?
Si una base de datos clave-valor tiene millones de claves, un solo servidor no será suficiente. Es necesario distribuir la carga en múltiples servidores.

Solución 1: Replicación en Redis
La replicación permite tener servidores secundarios que copian los datos del principal. Esto mejora la disponibilidad y rendimiento.

Para habilitar la replicación, configura un servidor Redis secundario (redis-slave.conf):

1replicaof 192.168.1.100 6379

Esto hará que el servidor secundario copie automáticamente los datos del principal.

Solución 2: Clustering en Redis
Si Redis recibe millones de solicitudes por segundo, se usa Redis Cluster para distribuir los datos en varios servidores.

Para iniciar un clúster con 3 nodos:

1redis-cli --cluster create 192.168.1.101:6379 192.168.1.102:6379 192.168.1.103:6379 --cluster-replicas 1

Redis distribuirá automáticamente las claves entre los nodos del clúster.

Solución 3: Uso de un balanceador de carga
Si Redis o Memcached manejan muchas solicitudes, es recomendable usar un balanceador de carga como HAProxy o Nginx para distribuir el tráfico entre varios servidores.