Four steps

Get started

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.

Run 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.

Shell
docker run --rm -p 6379:6379 \
  -e RUVIO_REQUIREPASS=change-me \
  -v ruvio-data:/data \
  salihcantekin/ruvio:linux

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.

Shell
docker run --rm -p 6379-6380:6379-6380 \
  -e RUVIO_SHARDS=2 \
  -e RUVIO_ADDR=0.0.0.0:6379 \
  -e RUVIO_ADVERTISE_HOST=YOUR_SERVER_IP \
  -e RUVIO_PROTECTED_MODE=false \
  -v ruvio-data:/data \
  salihcantekin/ruvio:linux

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-arm64
v=0.3.2
curl -LO https://github.com/salihcantekin/ruvio/releases/download/ruvio-$v/ruvio-$v-linux-x64.tar.gz
tar xzf ruvio-$v-linux-x64.tar.gz
cd ruvio-$v-linux-x64
./ruvio --requirepass change-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
cargo run --release --bin ruvio

The server is installed from the Docker image, a release binary, or built from a checkout; it is not published as a crate.

Connect with redis-cli

Ruvio speaks RESP2, so redis-cli and existing RESP clients connect as they would to Redis.

Shell
redis-cli -h 127.0.0.1 -p 6379 -a change-me PING
# 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.

Choose 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.

ProfileWhat a crash can lose
memoryThe whole dataset. This is the default. No WAL.
snapshotWrites since the last completed checkpoint.
everysecAbout one sync interval. The client is acknowledged after the append, and the file is synced on sync_interval_ms (default 1000).
alwaysThe 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.

Shell
docker run --rm -p 6379:6379 \
  -e RUVIO_REQUIREPASS=change-me \
  -e RUVIO_DURABILITY=everysec \
  -v ruvio-data:/data \
  salihcantekin/ruvio:linux

Add a client

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.

Shell
docker pull salihcantekin/ruvio-ui:linux
docker run --rm -p 8080:8080 \
  -e RUVIO_UI_TARGET_HOST=127.0.0.1 \
  -e RUVIO_UI_TARGET_PORT=6379 \
  salihcantekin/ruvio-ui:linux

Then open http://127.0.0.1:8080. Port 8080 is only the UI.

Next steps