Hi gophers,
Over the last year, I’ve been working on building EchoVault. EchoVault is an in-memory data store that is both client-server over TCP and completely embeddable within a Go application:
Current Features:
- TLS and mTLS support for multiple server and client RootCAs.
- Replication cluster support using the RAFT algorithm.
- ACL Layer for user Authentication and Authorization.
- Distributed Pub/Sub functionality with consumer groups.
- Sets, Sorted Sets, Hashes, Lists and more.
- Persistence layer with Snapshots and Append-Only files.
- Various Key Eviction Policies.
- Command extension via shared object files.
- Command extension via embedded API.
There are many more features in the pipeline, such as:
- Sharding
- Streams
- Bitmap
- HyperLogLog
- Lua Modules
EchoVault is fully RESP compatible over TCP, so you can use your existing Redis clients to communicate with an EchoVault server.
Why does this exist?
Here are some of the reasons I decided to build EchoVault:
-
Redis is lightweight but still an external service you must run. EchoVault allows you to embed an in-memory store offering a subset of Redis functionality embedded into your application, so you don’t have to worry about managing a separate service.
-
EchoVault removes the need to handle a Redis replication cluster. The embedded instances of EchoVault can connect to form a cluster with a simple configuration. So, each instance of your application can use the embedded API while EchoVault takes care of the replication for you.
-
Since Redis’ license shenanigans earlier this year, I believe EchoVault will be able to fill a role, particularly in the Go ecosystem. EchoVault is Apache 2.0 licenced.
EchoVault aims to make Redis redundant in many use cases where Redis would usually fit in Go applications or ecosystems. Over time, we aim to make this list of use cases longer and longer.
Possible user cases for EchoVault
You can use EchoVault in many of the same scenarios you’d use Redis, including but not limited to:
- Service discovery.
- In-memory data caching.
- Session management (across multiple instances of your application).
- Publish/Subscribe workflows
- Unordered key/value storage.
Check out the GitHub repository, and feel free to leave a start if you like the project.
Contributions are welcome too!