.github/workflows | ||
.vscode | ||
core | ||
helio@bfd4e2e15b | ||
redis | ||
server | ||
.clang-format | ||
.gitignore | ||
.gitmodules | ||
CMakeLists.txt | ||
LICENSE | ||
README.md |
Dragonfly
A toy memory store that supports basic commands like SET
and GET
for both memcached and redis protocols. In addition, it supports redis PING
command.
Demo features include:
- High throughput reaching millions of QPS on a single node.
- TLS support.
- Pipelining mode.
Building from source
I've tested the build on Ubuntu 21.04+.
git clone --recursive https://github.com/romange/dragonfly
cd dragonfly && ./helio/blaze.sh -release
cd build-opt && ninja dragonfly
Running
./dragonfly --logtostderr
for more options, run ./dragonfly --help
Milestone Egg 🥚
API 1.0
- String family
- SET
- SETNX
- GET
- DECR
- INCR
- DECRBY
- GETSET
- INCRBY
- MGET
- MSET
- MSETNX
- SUBSTR
- Generic family
- DEL
- ECHO
- EXISTS
- EXPIRE
- EXPIREAT
- Ping
- RENAME
- RENAMENX
- SELECT
- TTL
- TYPE
- SORT
- Server Family
- QUIT
- DBSIZE
- BGSAVE
- SAVE
- DBSIZE
- DEBUG
- EXEC
- FLUSHALL
- FLUSHDB
- INFO
- MULTI
- SHUTDOWN
- LASTSAVE
- SLAVEOF/REPLICAOF
- SYNC
- Set Family
- SADD
- SCARD
- SDIFF
- SDIFFSTORE
- SINTER
- SINTERSTORE
- SISMEMBER
- SMOVE
- SPOP
- SRANDMEMBER
- SREM
- SMEMBERS
- SUNION
- SUNIONSTORE
- List Family
- LINDEX
- LLEN
- LPOP
- LPUSH
- LRANGE
- LREM
- LSET
- LTRIM
- RPOP
- RPOPLPUSH
- RPUSH
- SortedSet Family
- ZADD
- ZCARD
- ZINCRBY
- ZRANGE
- ZRANGEBYSCORE
- ZREM
- ZREMRANGEBYSCORE
- ZREVRANGE
- ZSCORE
- Not sure whether these are required for the initial release.
- AUTH
- BGREWRITEAOF
- KEYS
- MONITOR
- RANDOMKEY
- MOVE
In addition, we want to support efficient expiry (TTL) and cache eviction algorithms. We should implement basic memory management support. For Master/Slave replication we should design a distributed log format.
API 2.0
- List Family
- BLPOP
- BRPOP
- BRPOPLPUSH
- PubSub family
- PUBLISH
- PUBSUB
- PUBSUB CHANNELS
- SUBSCRIBE
- UNSUBSCRIBE
- Server Family
- WATCH
- UNWATCH
- DISCARD
Commands that I prefer not implement before launch:
- PUNSUBSCRIBE
- PSUBSCRIBE And keyspace notifications. For that I would like to deep dive and learn exact use-cases for this API.
Milestone Nymph
API 2,3,4 without cluster support, without modules, without memory inspection commands. Without keyspace notifications.
Design config support. ~140 commands overall...
Milestone Molt
API 5,6 - without cluster and modules. Streams support. ~80 commands overall.
Milestone Adult
TBD.