Skip to content

GoRedisLite es una implementación minimalista de un motor de almacenamiento en memoria inspirado en Redis, escrito desde cero en Go. Este proyecto tiene como objetivo estudiar, aprender y replicar los fundamentos de Redis: protocolo propio, manejo en memoria, estructuras básicas y alto rendimiento con TCP nativo.

License

Notifications You must be signed in to change notification settings

CoderAnchel/GoRedisLite

Repository files navigation

🚀 GoRedisLite

Go Report Card License Go Version

Logo

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.


🧩 Características principales

  • 🔌 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.

📚 Comandos soportados

Consulta detalles y ejemplos en DOCS/Comandos.md.

Claves y valores

  • 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.

Hashes

  • 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.

Listas

  • LPUSH key value
    Inserta un elemento al inicio de una lista.
  • LPOP key
    Elimina y devuelve el primer elemento de una lista.

Usuarios y seguridad

  • 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).

Utilidades

  • LOGS
    Muestra los logs del sistema.

Ejemplo – Soporte de enteros y listas de enteros

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

⏳ Expiración de claves (TTL)

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

📦 Instalación y uso

Requisitos

  • Go 1.20+
  • netcat/telnet o cliente TCP para conectarse

Ejecutar el servidor

go run main.go

El servidor escucha por defecto en el puerto 6379.

Probar comandos

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

📁 Estructura del proyecto

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

🗺️ Roadmap

  • 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

🤝 Contribuciones

¡Las contribuciones son bienvenidas! Abre un issue, propone una mejora o envía un pull request.


📝 Licencia

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)

About

GoRedisLite es una implementación minimalista de un motor de almacenamiento en memoria inspirado en Redis, escrito desde cero en Go. Este proyecto tiene como objetivo estudiar, aprender y replicar los fundamentos de Redis: protocolo propio, manejo en memoria, estructuras básicas y alto rendimiento con TCP nativo.

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages