ab5031472e
1. Remove CO::STALE modifier since it's not relevant for now. 2. Propertly wire CallFromScript function to be called from redis.call. 3. Define 3rd party lua dependency as part of dragonfly project. 4. Add ARGV/KEYS arrays to lua scripts |
||
---|---|---|
.github/workflows | ||
.vscode | ||
core | ||
helio@847c612488 | ||
patches | ||
redis | ||
server | ||
.clang-format | ||
.gitignore | ||
.gitmodules | ||
CMakeLists.txt | ||
LICENSE | ||
README.md | ||
TODO.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
- Generic Family
- SCAN
Commands that I prefer not implement before launch:
- PUNSUBSCRIBE
- PSUBSCRIBE
Also, I would omit 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 support for 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.