An in-memory database, compatible with Redis protocol and clients. Written in Rust.
🔧 Stability: early alpha
"Amiko" means "friend" in Esperanto. Stress falls on "i", like in Spanish "amigo".
cargo build --release
Just run the amiko binary from the target/ directory. Currently, it always binds to 127.0.0.1:6379.
Default log level is info. Other available levels: off, error, warn, info, debug, trace. To change: AMIKO_LOG=<level>.
Amiko is intended to be a drop-in replacement — your existing Redis clients, apps and libraries should work with Amiko without modifications.
The following commands are supported:
SET <key> <value>GET <key>DEL <key>KEYS <pattern>(all Redis patterns should work)FLUSHDB [SYNC|ASYNC](always synchronous, optional argument is parsed but ignored)PING [msg],ECHO <msg>,QUIT
RESP3 is not supported at this time.
Amiko is lightweight and has low memory footprint. Binary size is around 6 MB, memory footprint is around ~2 MB (on an empty database).
Speed-wise, I expect it to be fairly speedy but not Redis speedy, at least in theory. In practice, current version of Amiko was even a bit faster on some tests.
# Redis 7.2.4
Test 1: 20000 writes of different keys
Elapsed: 721.67ms
# amiko
Test 1: 20000 writes of different keys
Elapsed: 554.77ms
While there are no benchmarks, here are some general thoughts:
- Concurrent reads are lock-free and should be very fast.
- Writes involve mutex-like locking; this should be fast but not that fast.
- Amiko uses traditional threads, which means it may not play well with large number of clients. Tens of clients with heavy load should be fine, though.
GNU LGPL v3