An Erlang version of Redis, with the goal of similar algorithmic performance but support for multiple master nodes and larger-than-RAM datasets. For More info, see this PDF of a Talk at Erlang Factory 2012.
$ make run and open connections with your favourite redis client.
Differences with Redis
- SAVE, BGSAVE and LASTSAVE are database dependent. The original Redis saves all databases at once, edis saves just the one you SELECT'ed.
- INFO provides much less information and no statistics (so, CONFIG RESETSTAT does nothing at all)
- MULTI doesn't support:
- cross-db commands (i.e. FLUSHALL, SELECT, MOVE)
- non-db commands (i.e AUTH, CONFIG *, SHUTDOWN, MONITOR)
- pub/sub commands (i.e. PUBLISH, SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE)
- (P)UNSUBSCRIBE commands are not allowed outside PUBSUB mode
- PUBLISH response is not precise: it's the amount of all clients subscribed to any channel and/or pattern, not just those that will handle the message. On the other hand it runs in O(1) because it's asynchronous, it just dispatches the message.
- Dynamic node configuration (i.e. the SLAVEOF command is not implemented)
- Encoding optimization (i.e. all objects are encoded as binary representations of erlang terms, so for instance "123" will never be stored as an int)
- OBJECT REFCOUNT allways returns 1 for existing keys and (nil) otherwise
SYNC, SLOWLOG, SLAVEOF, DEBUG *
edis is licensed by Electronic Inaka, LLC under the Apache 2.0 license; see the LICENSE file in this repository.
- Make use of the efficient range searchs with start/end for searching ranges
- Make use of time-based key expiry
- Finish the TODO items
- Swap out elog for lager