{"id":30351570,"url":"https://github.com/coderanchel/goredislite","last_synced_at":"2025-08-18T23:09:42.013Z","repository":{"id":296981892,"uuid":"988898894","full_name":"CoderAnchel/GoRedisLite","owner":"CoderAnchel","description":"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.","archived":false,"fork":false,"pushed_at":"2025-06-02T09:43:31.000Z","size":4242,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-03T18:51:12.036Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CoderAnchel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"DOCS/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-23T08:43:06.000Z","updated_at":"2025-06-02T09:43:35.000Z","dependencies_parsed_at":"2025-06-08T02:30:52.350Z","dependency_job_id":null,"html_url":"https://github.com/CoderAnchel/GoRedisLite","commit_stats":null,"previous_names":["coderanchel/goredislite"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/CoderAnchel/GoRedisLite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CoderAnchel%2FGoRedisLite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CoderAnchel%2FGoRedisLite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CoderAnchel%2FGoRedisLite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CoderAnchel%2FGoRedisLite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CoderAnchel","download_url":"https://codeload.github.com/CoderAnchel/GoRedisLite/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CoderAnchel%2FGoRedisLite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271073387,"owners_count":24694538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-18T23:09:41.367Z","updated_at":"2025-08-18T23:09:42.001Z","avatar_url":"https://github.com/CoderAnchel.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 GoRedisLite \n[![Go Report Card](https://goreportcard.com/badge/github.com/CoderAnchel/GoRedisLite)](https://goreportcard.com/report/github.com/CoderAnchel/GoRedisLite)\n[![License](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)](LICENSE.md)\n[![Go Version](https://img.shields.io/badge/Go-1.20%2B-brightgreen)](go.mod)\n\n![Logo](DOCS/assets/Group%2076.svg)\n\nGoRedisLite 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.\n\n---\n\n## 🧩 Características principales\n\n- 🔌 **Servidor TCP concurrente** con protocolo propio y parsing de comandos estilo Redis.\n- 🔐 **Sistema de usuarios** con autenticación y permisos.\n- ⚡️ **Tipos soportados:** strings, enteros, listas de strings/enteros, hashes.\n- ⏳ **Expiración de claves** configurable al guardar valores.\n- 💾 **Persistencia** en disco usando LevelDB para usuarios, roles y logs.\n- 📦 **Respuestas estructuradas en JSON** para integraciones sencillas.\n- 🗃️ **Logs de operaciones** y control de auditoría.\n- 🧪 **Cobertura de pruebas unitarias**.\n- 📜 **Documentación de comandos** en `DOCS/Comandos.md`.\n\n---\n\n## 📚 Comandos soportados\n\nConsulta detalles y ejemplos en [`DOCS/Comandos.md`](DOCS/Comandos.md).\n\n### Claves y valores\n- `SET key value [minutos_expiración]`  \n  Guarda un valor de cualquier tipo soportado (string, entero, lista, hash). Puedes agregar un cuarto argumento en minutos para establecer expiración (TTL).\n- `GET key`  \n  Recupera el valor asociado a una clave (sea string, entero, lista o hash).\n- `DEL key`  \n  Elimina la clave o campo especificado.\n\n### Hashes\n- `HSET key field value`  \n  Crea o actualiza un campo de un hash.\n- `HGET key field`  \n  Obtiene el valor de un campo específico de un hash.\n- `HGETALL key`  \n  Devuelve todos los campos y valores de un hash.\n\n### Listas\n- `LPUSH key value`  \n  Inserta un elemento al inicio de una lista.\n- `LPOP key`  \n  Elimina y devuelve el primer elemento de una lista.\n\n### Usuarios y seguridad\n- `LOGIN usuario contraseña`  \n  Inicia sesión con un usuario registrado.\n- `CREATE usuario contraseña`  \n  Crea un nuevo usuario con permisos básicos.\n- `CREATEPRED usuario contraseña rol`  \n  Crea un usuario asignándole un rol específico y configuraciones avanzadas (ideal para administración o automatización).\n\n### Utilidades\n- `LOGS`  \n  Muestra los logs del sistema.\n\n### Ejemplo – Soporte de enteros y listas de enteros\nPuedes guardar y recuperar enteros directamente, así como listas de enteros:\n```\nSET n 123\nGET n\nSET numeros [1,2,3]\nLPUSH numeros 4\nLPOP numeros\nHSET usuario:1 edad 25\nHGET usuario:1 edad\n```\n\n---\n\n## ⏳ Expiración de claves (TTL)\n\nAl 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.\n\n**Ejemplo:**\n```\nSET temp_token valor 3\nGET temp_token\n# tras 3 minutos, GET temp_token devolverá error o vacío\n```\n\n---\n\n## 📦 Instalación y uso\n\n### Requisitos\n\n- Go 1.20+\n- netcat/telnet o cliente TCP para conectarse\n\n### Ejecutar el servidor\n\n```bash\ngo run main.go\n```\nEl servidor escucha por defecto en el puerto `6379`.\n\n### Probar comandos\n\n```bash\nnc localhost 6379\n```\nEjemplo:\n```\nLOGIN usuario password\nSET foo bar 5\nGET foo\nHSET user:1 name Juan\nHGET user:1 name\nLPUSH lista valor\nLPOP lista\nCREATE otro_usuario otra_pass\nSET numeros [1,2,3]\nLPUSH numeros 4\nGET numeros\n```\n\n---\n\n## 📁 Estructura del proyecto\n\n```plaintext\nGoRedisLite/\n├── cmd/               # Ejecutables (servidor principal)\n├── internal/          # Lógica de negocio\n│   ├── Entities/      # Tipos y estructuras principales\n├── Parser/            # Parsing y ejecución de comandos\n├── Persistence/       # Persistencia a disco (LevelDB)\n├── Security/          # Seguridad, usuarios y roles\n├── Utils/             # Utilidades generales\n├── tests/             # Pruebas unitarias\n├── DOCS/              # Documentación y comandos detallados\n└── main.go\n```\n\n---\n\n## 🗺️ Roadmap\n\n- [x] Servidor TCP concurrente\n- [x] Parser extendido y validación de tipos\n- [x] Soporte para strings, enteros, listas, hashes\n- [x] Sistema de usuarios y autenticación\n- [x] Expiración de claves y TTL\n- [x] Persistencia (LevelDB)\n- [x] Logs y auditoría\n- [ ] SDK Go para integración en proyectos externos (en progreso)\n- [ ] Clustering y sharding (en progreso)\n- [ ] Parser RESP (compatibilidad total con clientes Redis)\n- [ ] Mejoras de rendimiento y benchmarks comparativos\n\n---\n\n## 🤝 Contribuciones\n\n¡Las contribuciones son bienvenidas! Abre un issue, propone una mejora o envía un pull request.\n\n---\n\n## 📝 Licencia\n\nBSD 3-Clause License – consulta el archivo LICENSE.md para más detalles.\n\n---\n\n\u003e _GoRedisLite es un proyecto educativo y experimental. No recomendado para producción._TTL)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoderanchel%2Fgoredislite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoderanchel%2Fgoredislite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoderanchel%2Fgoredislite/lists"}