Go to file
Roman Gershman ab5031472e Small fixes
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
2022-02-24 14:11:51 +02:00
.github/workflows Use container in CI 2022-02-24 14:11:50 +02:00
.vscode Implement Save of rdb header/epilog 2022-02-24 14:11:51 +02:00
core Small fixes 2022-02-24 14:11:51 +02:00
helio@847c612488 Small fixes 2022-02-24 14:11:51 +02:00
patches Small fixes 2022-02-24 14:11:51 +02:00
redis Add mimalloc as the default allocator for redis structures 2022-02-24 14:11:51 +02:00
server Small fixes 2022-02-24 14:11:51 +02:00
.clang-format Add redis parser + test 2021-11-17 16:32:14 +02:00
.gitignore Add async library to the project 2021-11-16 09:59:13 +02:00
.gitmodules Rename async to helio 2021-11-18 17:14:05 +02:00
CMakeLists.txt Small fixes 2022-02-24 14:11:51 +02:00
LICENSE Adding expiry functionality. 2021-12-20 11:42:55 +02:00
README.md Add skeleton of replication manager and initial support of replicaof command 2022-02-24 14:11:51 +02:00
TODO.md Allow calling a redis function from interpreter. 2022-02-24 14:11:51 +02:00

Dragonfly

ci-tests

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:

  1. High throughput reaching millions of QPS on a single node.
  2. TLS support.
  3. 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.