Run the server, connect with redis-cli, then add a client. A default process listens on 127.0.0.1:6379, and PING answers PONG.
1Run the server
Docker Hub has one Linux image. linux and latest are the same image, as is each version tag, built for linux/amd64. On an arm64 host such as Apple Silicon, Docker runs it under emulation; use a prebuilt binary for a native arm64 server.
The container sets RUVIO_PROTECTED_MODE=false because a published port is not loopback inside the namespace, so put a password on any bind that is not loopback. The image default durability is memory; a persistent deploy sets RUVIO_DURABILITY and keeps the volume. The process runs as UID 10001.
Two shards in one container
Two shards publish consecutive ports. Advertise the host clients can reach; without that, CLUSTER SLOTS hands out 127.0.0.1 and a remote app cannot follow MOVED.
First-party clients take only YOUR_SERVER_IP:6379. They read the slot map and open 6380 themselves.
GitHub Releases has prebuilt binaries for Linux x64 and arm64, macOS arm64 and Windows x64. Each archive holds ruvio (the server), ruvio-ctl (backup, restore and checks), ruvio.example.toml, the README and the license; SHA256SUMS lists the checksums.
Shell
# Linux x64; swap the platform for linux-arm64 or macos-arm64v=0.3.2curl-LOhttps://github.com/salihcantekin/ruvio/releases/download/ruvio-$v/ruvio-$v-linux-x64.tar.gztarxzfruvio-$v-linux-x64.tar.gzcdruvio-$v-linux-x64./ruvio--requirepasschange-me--data-dir./data
On Windows, unzip ruvio-<version>-windows-x64.zip and run ruvio.exe. On macOS, a binary downloaded by a browser is quarantined; xattr -d com.apple.quarantine ruvio ruvio-ctl clears it (downloads with curl are not quarantined). ruvio --help lists every flag.
From a checkout of the repository, with the Rust toolchain installed:
Shell
cargorun--release--binruvio
The server is installed from the Docker image, a release binary, or built from a checkout; it is not published as a crate.
2Connect with redis-cli
Ruvio speaks RESP2, so redis-cli and existing RESP clients connect as they would to Redis.
Shell
redis-cli-h127.0.0.1-p6379-achange-mePING# PONG
Settings merge in this order: built-in defaults, ruvio.toml (or --config / RUVIO_CONFIG), RUVIO_* environment variables, then command-line flags. The file is read once, at process start, and unknown TOML fields are rejected.
3Choose a durability profile
You choose how much a crash can lose, at startup. A write is checked, appended, then applied. If the log cannot take the record, the key stays as it was and later writes return MISCONF.
Profile
What a crash can lose
memory
The whole dataset. This is the default. No WAL.
snapshot
Writes since the last completed checkpoint.
everysec
About one sync interval. The client is acknowledged after the append, and the file is synced on sync_interval_ms (default 1000).
always
The record is synced before it is applied and before the reply.
Set it with --durability, RUVIO_DURABILITY or persistence.profile in ruvio.toml. Shard count, bind address and durability cannot change under a live process.
First-party clients speak RESP2, do not send CLIENT SETINFO, and learn CLUSTER SLOTS from one seed address. The Go module is released by git tag and served by the Go module proxy; the others are published to their registries.
For ASP.NET Core, Ruvio.Client.AspNetCore registers the connection with dependency injection: dotnet add package Ruvio.Client.AspNetCore.
Operator UI
A browser view of one running server: data, command forms, Pub/Sub and ACL users. The container serves the browser and connects to the Ruvio server named by RUVIO_UI_TARGET_HOST and RUVIO_UI_TARGET_PORT. Sign-in is the server ACL user.