- O Redka tem como objetivo reimplementar as vantagens do Redis com SQLite, mantendo compatibilidade com a API do Redis
- Principais características:
- Os dados não precisam caber no tamanho da RAM
- Suporte a transações ACID
- Consulta de dados via views SQL e recursos de relatórios aprimorados
- Suporte tanto a servidor in-process (API Go) quanto standalone (RESP)
- Suporte a comandos e protocolo compatíveis com Redis
- Atualmente está em desenvolvimento; para status de suporte e roadmap, consulte a documentação abaixo
Comandos suportados
- O objetivo do Redka é oferecer suporte aos 5 tipos de dados principais do Redis: String, List, Set, Hash e Sorted Set
- String, Hash, gerenciamento de chaves e comandos de transação já são suportados, enquanto List, Set e Sorted Set ainda estão em desenvolvimento
- Para a lista detalhada de comandos, consulte o texto original
Como instalar
Servidor standalone
- Baixe o arquivo binário correspondente ao seu sistema operacional na página de Releases e execute-o
- Se for usar Docker, baixe a imagem com
docker pull nalgeon/redka
Módulo Go
- Instale o módulo com
go get github.com/nalgeon/redka
- Use
github.com/mattn/go-sqlite3 ou modernc.org/sqlite como driver SQLite
Como usar
Servidor standalone
- Execute o binário baixado no formato
redka [-h host] [-p port] [db-path]
- Os valores padrão são host
localhost, porta 6379 e nenhum caminho de DB (em memória)
- Ao usar Docker, execute com o comando
docker run. Para opções detalhadas, consulte o texto original
- Após iniciar o servidor, é possível conectar com clientes compatíveis com Redis, como
redis-cli, redis-py e go-redis
Servidor in-process
- Crie um objeto de banco de dados com a função
redka.Open(). É obrigatório importar o driver
- Execute vários comandos chamando os métodos do objeto
redka.DB
- Processe transações com os métodos
View (somente leitura) e Update (com escrita)
Persistência
- O Redka armazena os dados no banco SQLite usando as tabelas
rkey, rstring e rhash
- É possível consultar os dados com SQL por meio de views para cada tipo de dado (
vstring, vhash etc.)
Desempenho
- Comparação de desempenho entre Redis e Redka usando a ferramenta redis-benchmark
- O Redka é cerca de 6 vezes mais lento em SET e 2 vezes mais lento em GET
- Ainda assim, apresenta desempenho na faixa de 23K writes/s e 57K reads/s
- Pode haver perda de desempenho ao executar em contêineres
Roadmap
- Na versão 1.0, a implementação deve focar principalmente nos recursos centrais da era do Redis 2.x
- String, Hash, gerenciamento de chaves e suporte a transações já concluídos
- Sorted Set em desenvolvimento
- List e Set planejados
- Em versões futuras, estão previstos tipos de dados como Stream, HyperLogLog e Geo, além de funcionalidade Pub/Sub
- Não há planos para implementar scripting em Lua, autenticação/ACL, múltiplos DBs, Watch/Unwatch etc.
- Também não há intenção de implementar recursos de cluster e Sentinel
Opinião do GN⁺
- A abordagem do Redka é interessante por oferecer persistência mantendo ampla compatibilidade com Redis. O suporte a transações ACID também parece ser um ponto positivo.
- Em desempenho, ele não alcança o Redis, mas, quando a persistência é necessária, parece uma alternativa bastante considerável.
- Como ainda está em estágio inicial de desenvolvimento, a estabilidade precisa ser observada com mais cautela, e o fato de várias funcionalidades estarem fora do roadmap é algo a considerar numa adoção real.
- Para uso puramente in-memory, dificilmente superará o Redis, mas pode ser útil como uma camada de persistência baseada em SQLite.
- Hoje há uma demanda crescente por stacks leves em ambientes de edge computing, e esse pode ser um campo em que o Redka seja usado no lugar do Redis.
2 comentários
Parece que vai ser útil quando for preciso acoplar o Redis ao scheduler haha
Comentários no Hacker News
SetMaxConnections(1), mas no modo WAL (que está em uso) o SQLite permite escritas que não bloqueiam leituras, então pode haver vantagem em permitir concorrência de leitura