Servidor in-memory minimalista e legível, em RustUm banco de dados in-memory leve, feito para ser lido.
O Memorust é um servidor key-value in-memory de binário único, escrito em Rust com Tokio. Ele fala o protocolo RESP, então funciona com o redis-cli e clientes Redis existentes, mantendo o código pequeno e legível.
Rodando em segundos
Clone, compile e conecte com qualquer cliente Redis.
git clone https://github.com/robertolima-dev/memorust.git
cd memorust
cargo run # starts the server on 127.0.0.1:6379
# in another terminal
redis-cli -p 6379
> SET name Roberto
> GET nameO que ele faz
Um subconjunto focado do Redis, implementado do zero com a legibilidade como objetivo.
Protocolo RESP
Fala o Redis Serialization Protocol, então o redis-cli e clientes Redis existentes se conectam sem mudanças.
Servidor TCP assíncrono
Construído sobre o Tokio, com suporte a múltiplos clientes e leituras concorrentes sob um lock compartilhado.
TTL e expiração
SETEX, EXPIRE e TTL com um limpador em segundo plano que recupera chaves expiradas.
Persistência AOF
Append Only File com escritor bufferizado, fsync periódico (~1s) e replay na inicialização.
Rewrite do AOF
Compacta o log com AOFREWRITE para manter o histórico em disco pequeno.
Binário único, uma dependência
Rust edition 2024 com o Tokio como única dependência. Fácil de compilar, ler e modificar.
Rápido onde importa
redis-benchmark em build de release, máquina de desenvolvimento Apple série M.
| Operação | Sem pipeline (-P 1) | Com pipeline (-P 16) |
|---|---|---|
| SET | ~142k ops/seg | ~264k ops/seg |
| GET | ~163k ops/seg | ~1,27M ops/seg |
Sem pipelining o benchmark é dominado pelos round-trips de rede. Com pipelining aparece o teto do servidor: as leituras escalam muito além das escritas porque o GET roda concorrente sob um lock compartilhado.
Comandos suportados
Um subconjunto crescente do conjunto de comandos do Redis.
Conexão
- PING
Chave / Valor
- SET
- GET
- DEL
- EXISTS
Expiração
- SETEX
- EXPIRE
- TTL
Administração
- INFO
- FLUSHALL
- AOFREWRITE
Roadmap
Para onde o Memorust está indo.
- ✓Servidor TCP e protocolo RESP
- ✓Compatibilidade com redis-cli
- ✓TTL e limpador em segundo plano
- ✓AOF, replay e rewrite
- ✓Escritor AOF bufferizado (appendfsync everysec)
- ·Escritor AOF assíncrono
- ·Tipos de valor (Integer, JSON, List)
- ·Config.toml
- ·Políticas de evicção de memória
- ·Snapshot binário (.db)
- ·Replicação
- ·Modo cluster
Participe do projeto
O Memorust é open source e contribuições são muito bem-vindas, de correções de digitação a novos comandos.
Contribuir
Veja o fluxo de desenvolvimento, as verificações exigidas e como abrir um pull request.
Guia de contribuição →Issues e ideias
Encontrou um bug ou quer discutir uma funcionalidade? Abra uma issue no GitHub.
Abrir uma issue →Código de Conduta
Ao participar deste projeto você concorda em seguir nosso Código de Conduta.
Ler o Código de Conduta →