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.