GoRedisLite es una implementación completa de un motor de almacenamiento en memoria, inspirado en Redis y escrita desde cero en Go. Replica fundamentos como protocolo propio, manejo en memoria, estructuras complejas, autenticación de usuarios, expiraciones y persistencia. Es ideal para aprender, experimentar y analizar cómo funciona un sistema tipo Redis.
- 🔌 Servidor TCP concurrente con protocolo propio y parsing de comandos estilo Redis.
- 🔐 Sistema de usuarios con autenticación y permisos.
- ⚡️ Tipos soportados: strings, enteros, listas de strings/enteros, hashes.
- ⏳ Expiración de claves configurable al guardar valores.
- 💾 Persistencia en disco usando LevelDB para usuarios, roles y logs.
- 📦 Respuestas estructuradas en JSON para integraciones sencillas.
- 🗃️ Logs de operaciones y control de auditoría.
- 🧪 Cobertura de pruebas unitarias.
- 📜 Documentación de comandos en
DOCS/Comandos.md
.
Consulta detalles y ejemplos en DOCS/Comandos.md
.
SET key value [minutos_expiración]
Guarda un valor de cualquier tipo soportado (string, entero, lista, hash). Puedes agregar un cuarto argumento en minutos para establecer expiración (TTL).GET key
Recupera el valor asociado a una clave (sea string, entero, lista o hash).DEL key
Elimina la clave o campo especificado.
HSET key field value
Crea o actualiza un campo de un hash.HGET key field
Obtiene el valor de un campo específico de un hash.HGETALL key
Devuelve todos los campos y valores de un hash.
LPUSH key value
Inserta un elemento al inicio de una lista.LPOP key
Elimina y devuelve el primer elemento de una lista.
LOGIN usuario contraseña
Inicia sesión con un usuario registrado.CREATE usuario contraseña
Crea un nuevo usuario con permisos básicos.CREATEPRED usuario contraseña rol
Crea un usuario asignándole un rol específico y configuraciones avanzadas (ideal para administración o automatización).
LOGS
Muestra los logs del sistema.
Puedes guardar y recuperar enteros directamente, así como listas de enteros:
SET n 123
GET n
SET numeros [1,2,3]
LPUSH numeros 4
LPOP numeros
HSET usuario:1 edad 25
HGET usuario:1 edad
Al usar SET
puedes agregar como cuarto argumento los minutos de vigencia de la clave. Tras ese tiempo, la clave se elimina automáticamente al intentar acceder a ella.
Ejemplo:
SET temp_token valor 3
GET temp_token
# tras 3 minutos, GET temp_token devolverá error o vacío
- Go 1.20+
- netcat/telnet o cliente TCP para conectarse
go run main.go
El servidor escucha por defecto en el puerto 6379
.
nc localhost 6379
Ejemplo:
LOGIN usuario password
SET foo bar 5
GET foo
HSET user:1 name Juan
HGET user:1 name
LPUSH lista valor
LPOP lista
CREATE otro_usuario otra_pass
SET numeros [1,2,3]
LPUSH numeros 4
GET numeros
GoRedisLite/
├── cmd/ # Ejecutables (servidor principal)
├── internal/ # Lógica de negocio
│ ├── Entities/ # Tipos y estructuras principales
├── Parser/ # Parsing y ejecución de comandos
├── Persistence/ # Persistencia a disco (LevelDB)
├── Security/ # Seguridad, usuarios y roles
├── Utils/ # Utilidades generales
├── tests/ # Pruebas unitarias
├── DOCS/ # Documentación y comandos detallados
└── main.go
- Servidor TCP concurrente
- Parser extendido y validación de tipos
- Soporte para strings, enteros, listas, hashes
- Sistema de usuarios y autenticación
- Expiración de claves y TTL
- Persistencia (LevelDB)
- Logs y auditoría
- SDK Go para integración en proyectos externos (en progreso)
- Clustering y sharding (en progreso)
- Parser RESP (compatibilidad total con clientes Redis)
- Mejoras de rendimiento y benchmarks comparativos
¡Las contribuciones son bienvenidas! Abre un issue, propone una mejora o envía un pull request.
BSD 3-Clause License – consulta el archivo LICENSE.md para más detalles.
_GoRedisLite es un proyecto educativo y experimental. No recomendado para producción._TTL)