Skip to content

About

A single-instance Redis-compatible server in C and Rust. Clients use RESP2 or RESP3 for strings, lists, hashes, sets, sorted sets, expiry, transactions, and pub/sub. Both binaries share AOF logs and SRDB snapshots.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

SimpleRedis

simpleredis-server is a single-instance in-memory server for applications that speak the Redis protocol. Point a normal client at it. You do not install Redis.

Default address: 127.0.0.1:6379.

make
./src/simpleredis-server redis.conf

The same server is also implemented in Rust. Build it with rustc (Cargo works too, and the crate has no dependencies):

mkdir -p rust/target/debug
rustc --edition 2021 -O -o rust/target/debug/simpleredis-server rust/src/main.rs
./rust/target/debug/simpleredis-server redis.conf

Snapshots written by either binary load in the other. Point SIMPLEREDIS_BIN at the binary you want the protocol suite to start.

The process stays in the foreground and logs to stderr. A service manager should run that command directly. SIGINT and SIGTERM persist the active mode, then exit.

The command matrix, reply bytes, and file formats are specified in docs/superpowers/specs/2026-10-30-simpleredis-design.md.

Support

Supported: strings, lists, hashes, sets, sorted sets, expiry, MULTI/EXEC/WATCH, pub/sub, HELLO 2 and 3, AOF or a snapshot (SRDB), optional requirepass, and a maxmemory limit that rejects growing writes.

Not supported, and rejected with -ERR unknown command: replication, cluster, sentinel, streams, Lua, modules, ACL user lists, TLS, bitops, geo, and HyperLogLog. This server does not load files written by Redis.

On-disk files are specific to SimpleRedis. An AOF or SRDB snapshot written here restarts here. Moving an existing Redis dataset is a one-time copy through a client.

Clients

Point a normal client at 127.0.0.1:6379. Protocol 2 and protocol 3 both work.

Python:

import redis
client = redis.Redis(host="127.0.0.1", port=6379, protocol=3)
client.set("k", "v")

Node:

import { createClient } from "redis";
const client = createClient({ url: "redis://127.0.0.1:6379" });
await client.connect();
await client.set("k", "v");

Go:

rdb := redis.NewClient(&redis.Options{
    Addr:     "127.0.0.1:6379",
    Protocol: 3,
})

A service manager runs the binary in the foreground:

ExecStart=/usr/local/bin/simpleredis-server /etc/simpleredis/redis.conf
Restart=on-failure

SIGINT and SIGTERM persist the active mode, then exit.

Tests

make test
python3 tests/integration/protocol.py
python3 tests/integration/cross_lang.py
rustc --edition 2021 --test -o /tmp/simpleredis-rust-tests rust/src/main.rs && /tmp/simpleredis-rust-tests

The integration suite uses only the Python standard library. Set SIMPLEREDIS_BIN to point it at another binary.

About

A single-instance Redis-compatible server in C and Rust. Clients use RESP2 or RESP3 for strings, lists, hashes, sets, sorted sets, expiry, transactions, and pub/sub. Both binaries share AOF logs and SRDB snapshots.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages