Go to file
Roman Gershman aa2136a406 Add CompactObject that will represent all the possible dragonfly types
Specifically, it act as union for int,string, set, zset and other types
that exist in Redis API. In order to be more memory friendly, CompactObject
incorporates inline storage that will be used for SSO.
2022-02-24 14:11:43 +02:00
.github/workflows Identify multi-blpop interaction bug. 2022-01-13 13:10:34 +02:00
core Add CompactObject that will represent all the possible dragonfly types 2022-02-24 14:11:43 +02:00
helio@b3675ad886 Add generic_family_test. Minor cleanups 2022-01-04 15:11:37 +02:00
redis Implement basic list operations 2022-01-02 10:40:16 +02:00
server Identify multi-blpop interaction bug. 2022-01-13 13:10:34 +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 Add bunch of redis files 2021-12-27 10:03:29 +02:00
LICENSE Adding expiry functionality. 2021-12-20 11:42:55 +02:00
README.md Update state of things 2022-01-09 20:43:49 +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.

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.