Memory database - "redis v3, in Rust"
memds intends to be "the next thing after redis"
Looking through software history, we can consider memcached as Version 1: memcached provides a single key/value namespace for string values, plus some small mods for atomic numbers. redis is Version 2: Differences between abstract data types (ADTs) are made explicit with strings, sets, lists, hash [tables], streams and more.
memds is Version 3: Formally model the network protocol and database namespace. Represent abstract data types as CLASS.METHOD internal Remote Procedure Calls (RPCs), batched together as a bytecode-like stream of database mutation operations.
This project is alpha status; brand new; wet cement. Proceed with with that caveat in mind.
Contributors via Pull Request are welcome.
The current code is still a work in progress, in terms of implementing the models described below. See the following markdown docs for more detailed information:
Old redis model:
[database number] [key] [abstract data type]
New memds model:
[database key] [key] [abstract data type, possibly with its own hierarchy]
-
Old redis protocol hierarchy: All ADTs overloaded in a single command namespace ("HLEN","LLEN").
-
New memds protocol hierarchy: Each ADT in its own class-specific namespace. (like "HASH.LEN","LIST.LEN", but with integer identifiers).
-
Old redis network protocol: Custom protocol, requiring custom clients across N programming languages.
-
New memds network protocol: Protobuf schema, automatically generating correct, compliant, fast client codecs for many languages.
memds-cli
: Command line clientmemds-proto
: wire protocol librarymemds-server
: Database server
All building is done via the standard Rust tool Cargo.
$ cargo build --release
$ cargo test --release