Protocolo RESP
Fala o Redis Serialization Protocol, então o redis-cli e clientes Redis existentes se conectam sem mudanças.
UM EXPERIMENTO EM RUST
Um banco de dados em memória inspirado no Redis. Explore redes, concorrência e persistência em uma base de código que você consegue entender.
# Uma conversa com o Memorust
$ redis-cli -p 6379
127.0.0.1:6379 > SET name Roberto
OK
127.0.0.1:6379 > GET name
"Roberto"
127.0.0.1:6379 > PING
PONG
OS FUNDAMENTOS, NA PRÁTICA
Um subconjunto focado do Redis, implementado do zero com a legibilidade como objetivo.
Fala o Redis Serialization Protocol, então o redis-cli e clientes Redis existentes se conectam sem mudanças.
Construído sobre o Tokio, com suporte a múltiplos clientes e leituras concorrentes sob um lock compartilhado.
SETEX, EXPIRE e TTL com um limpador em segundo plano que recupera chaves expiradas.
Append Only File com escritor bufferizado, fsync periódico (~1s) e replay na inicialização.
Compacta o log com AOFREWRITE para manter o histórico em disco pequeno.
Rust edition 2024 com o Tokio como única dependência. Fácil de compilar, ler e modificar.
PRIMEIROS PASSOS
Clone, compile e conecte com qualquer cliente Redis.
Rust 1.85+ · redis-cli para conectar
Ler a documentaçãogit clone https://github.com/robertolima-dev/memorust.git
cd memorust
cargo run# Em outro terminal
redis-cli -p 6379MEDIR TAMBÉM É APRENDER
redis-benchmark em build de release, máquina de desenvolvimento Apple série M.
operações por segundo
| 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 |
Resultados de referência; variam conforme o ambiente.
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.
REFERÊNCIA DE COMANDOS
Um subconjunto crescente do conjunto de comandos do Redis.
PINGSETGETDELEXISTSSETEXEXPIRETTLINFOFLUSHALLAOFREWRITECONSTRUÍDO EM ABERTO
O Memorust é open source e contribuições são muito bem-vindas, de correções de digitação a novos comandos.
Veja o fluxo de desenvolvimento, as verificações exigidas e como abrir um pull request.
Guia de contribuiçãoEncontrou um bug ou quer discutir uma funcionalidade? Abra uma issue no GitHub.
Abrir uma issueAo participar deste projeto você concorda em seguir nosso Código de Conduta.
Ler o Código de Conduta