Go to file
Roman Gershman b8521828e3 Add Dockerfile for prod container. Reorganize source tree to be docker-build friendly. 2022-02-25 10:03:42 +02:00
.github/workflows Add Dockerfile for prod container. Reorganize source tree to be docker-build friendly. 2022-02-25 10:03:42 +02:00
.vscode Implement Save of rdb header/epilog 2022-02-24 14:11:51 +02:00
helio@ec055f6bb2 Add alpine-dev container to test matrix 2022-02-24 14:11:51 +02:00
patches Simplify serialization logic in Interpreter 2022-02-24 14:11:51 +02:00
src Add Dockerfile for prod container. Reorganize source tree to be docker-build friendly. 2022-02-25 10:03:42 +02:00
tools/docker Add Dockerfile for prod container. Reorganize source tree to be docker-build friendly. 2022-02-25 10:03:42 +02:00
.clang-format Add redis parser + test 2021-11-17 16:32:14 +02:00
.dockerignore Add Dockerfile for prod container. Reorganize source tree to be docker-build friendly. 2022-02-25 10:03:42 +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
.gitorderfile Introduce SmallString as another option for CompactObject 2022-02-24 15:22:59 +02:00
CMakeLists.txt Add Dockerfile for prod container. Reorganize source tree to be docker-build friendly. 2022-02-25 10:03:42 +02:00
LICENSE Adding expiry functionality. 2021-12-20 11:42:55 +02:00
README.md Add support for incr/decr/quit memcache commands 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

README.md

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.

Memchache API

  • set
  • get
  • replace
  • add
  • stats (partial)
  • append
  • prepend
  • delete
  • flush_all
  • incr
  • decr
  • version
  • quit

API 2.0

  • List Family
    • BLPOP
    • BRPOP
    • BRPOPLPUSH
  • PubSub family
    • PUBLISH
    • PUBSUB
    • PUBSUB CHANNELS
    • SUBSCRIBE
    • UNSUBSCRIBE
  • Server Family
    • WATCH
    • UNWATCH
    • DISCARD
  • Generic Family
    • SCAN
  • String Family
    • APPEND
    • PREPEND (dragonfly specific)

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.