Go to file
Roman Gershman 0cf2f57bf2 Fix expiry bug in AddOrFind function
Also add more test coverage.
Fix a bug where iterators might get invalidated between Renamer hops.
Initial work on BLPOP transaction.
2022-01-12 08:48:41 +02:00
.github/workflows Fix checkout directive 2021-12-21 11:29:59 +02:00
core Fix expiry bug in AddOrFind function 2022-01-12 08:48:41 +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 Fix expiry bug in AddOrFind function 2022-01-12 08:48:41 +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

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.