Skip to content

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

Security policy

Stars

1 star

Watchers

0 watching

Forks

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

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages