- Redka busca reimplementar las ventajas de Redis sobre SQLite, manteniendo compatibilidad con la API de Redis
- Características principales:
- Los datos no necesitan ajustarse al tamaño de la RAM
- Soporte para transacciones ACID
- Consultas de datos y capacidades de reporting mejoradas mediante vistas SQL
- Soporta tanto servidor in-process (API de Go) como servidor standalone (RESP)
- Soporte para comandos y protocolo compatibles con Redis
- Actualmente está en desarrollo; para el estado de soporte y la hoja de ruta, consulta la documentación a continuación
Comandos soportados
- Redka tiene como objetivo soportar los 5 tipos de datos principales de Redis: String, List, Set, Hash y Sorted Set
- String, Hash, gestión de claves y comandos de transacción ya están soportados; List, Set y Sorted Set están en desarrollo
- Para la lista detallada de comandos, consulta el original
Instalación
Servidor standalone
- Descarga el archivo binario correspondiente a tu sistema operativo desde la página de releases y ejecútalo
- Si usas Docker, descarga la imagen con
docker pull nalgeon/redka
Módulo de Go
- Instala el módulo con
go get github.com/nalgeon/redka
- Usa
github.com/mattn/go-sqlite3 o modernc.org/sqlite como driver de SQLite
Cómo usarlo
Servidor standalone
- Ejecuta el binario descargado con el formato
redka [-h host] [-p port] [db-path]
- Los valores por defecto son host
localhost, puerto 6379 y sin ruta de DB (en memoria)
- Si usas Docker, ejecútalo con el comando
docker run. Para opciones detalladas, consulta el original
- Después de iniciar el servidor, puedes conectarte con clientes compatibles con Redis como
redis-cli, redis-py o go-redis
Servidor in-process
- Crea el objeto DB con la función
redka.Open(). Es obligatorio importar el driver
- Ejecuta distintos comandos invocando los métodos del objeto
redka.DB
- Maneja transacciones con los métodos
View (solo lectura) y Update (con escritura)
Persistencia
- Redka almacena datos en la base de datos SQLite usando las tablas rkey, rstring y rhash
- Es posible consultar datos con SQL mediante vistas para cada tipo de dato (vstring, vhash, etc.)
Rendimiento
- Comparación de rendimiento entre Redis y Redka con la herramienta redis-benchmark
- Redka es unas 6 veces más lento en SET y alrededor de 2 veces más lento en GET
- Aun así, muestra un rendimiento de unas 23K escrituras/s y 57K lecturas/s
- Si se ejecuta en un contenedor, puede haber degradación de rendimiento
Hoja de ruta
- Para el lanzamiento 1.0, se planea implementar principalmente las funciones clave de la era de Redis 2.x
- String, Hash, gestión de claves y soporte de transacciones ya están completos
- Sorted Set está en desarrollo
- List y Set están planeados
- En versiones futuras se planea agregar tipos de datos como Stream, HyperLogLog y Geo, además de funciones Pub/Sub
- No hay planes de implementar scripting en Lua, autenticación/ACL, multi-DB, Watch/Unwatch, etc.
- Tampoco se planea implementar funciones de cluster ni Sentinel
Opinión de GN⁺
- El enfoque de Redka, que ofrece persistencia mientras mantiene compatibilidad en gran parte con Redis, resulta interesante. El soporte para transacciones ACID también parece una ventaja.
- En rendimiento no alcanza a Redis, pero si se necesita persistencia, parece una alternativa que vale la pena considerar.
- Aun así, como todavía está en una etapa temprana de desarrollo, habrá que seguir observando su estabilidad, y el hecho de que falten varias funciones en la hoja de ruta es algo a considerar para una adopción real.
- Para uso in-memory, al final no podrá superar a Redis, pero como capa de persistencia basada en SQLite podría resultar útil.
- Últimamente ha aumentado la demanda de stacks ligeros en entornos de edge computing, así que en ese tipo de escenarios podría probarse Redka en lugar de Redis.
2 comentarios
Parece que sería útil usarlo cuando el scheduler necesita conectarse a Redis jaja
Comentarios en Hacker News