This crate provides a custom Redis module type using Rust's FFI support.
By leveraging the ability to make custom types that Redis can utilize we can
use Rust to provide a new data structure. The MultiMap type is akin to Redis' existing hash type with the added
benefit of storing more than one value.
I would not consider this module to be production ready at the moment. There should be more extensive unit test coverage.
Some benchmark numbers achieved by running the provided script locally:
MULTIMAP.INSERT averaged over 5 runs: 66,760 requests/s
SET averaged over 5 runs: 78,672 requests/sYou must have Rust and LLVM installed in order to compile this project. The preferred way to install Rust is using the rustup tool. If you are wary of shell script installs, you can download it through brew.
brew install llvm # And `brew install rust` if you don't already have it installed.
git clone https://github.com/gsquire/redis-multi-map
cd redis-multi-map
cargo build --release # The dynamic library will be under the target/release folder.You can load the module in a few ways.
redis-server --loadmodule /path/to/module.dylib # Or /path/to/module.so on Unix systems.loadmodule /path/to/module.dylibThe API is open to extending if other functionality is desired. The currently supported commands are as follows:
MULTIMAP.INSERT KEY MAP_KEY MAP_VALUE...This command returns a simple string of "OK".
MULTIMAP.VALUES KEY MAP_KEYThis command lists all values associated with MAP_KEY. It is an array of strings.
MULTIMAP.LEN KEY MAP_KEYThis command returns the length of values for MAP_KEY and 0 if it doesn't exist. This is an integer response.
MULTIMAP.DEL KEY MAP_KEYThis command deletes MAP_KEY from KEY. It is an integer response of 0 if MAP_KEY did not exist and 1 if it did.
Thanks to redis-cell for providing some motivation and guidance in making another module using Rust.
This code is release under an MIT license and the Redis license stored under REDIS_LICENSE.