dragonfly

dragonflydb活跃维护

兼容 Redis 和 Memcached 协议的内存数据库,用多线程架构提升吞吐量,可直接替换现有缓存层。

A modern replacement for Redis and Memcached

v2.1发布于 2026-11-04 16:10 UTC31,856star +10 / 7 天1,292fork同步于 2026-11-10 11:21 UTC

怎么上手

由 README 提炼,执行前请确认
docker run --ulimit memlock=-1 --name dragonfly -p 6379:6379 -it docker.dragonflydb.io/dragonflydb/dragonfly
硬件要求按 README 说明

README 未说明具体 CPU/内存/显存要求;基准测试在 AWS m5、c6gn、r6g、c7g 等实例上完成,吞吐随实例规格提升。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

兼容 Redis 和 Memcached API 的内存数据存储,无需改代码即可替换以获得更高吞吐

兼容 Redis 和 Memcached 协议的内存数据库,用多线程架构提升吞吐量,可直接替换现有缓存层。

核心能力

  • 完全兼容 Redis 与 Memcached API,无需改代码即可迁移
  • 多线程架构随实例规格纵向扩展吞吐,单机可超 3.8M QPS
  • 统一自适应缓存算法,接近 maxmemory 时淘汰最不可能访问的键
  • 快照期间内存占用平稳,空闲态比 Redis 省约 30% 内存
  • 支持 snapshot_cron 按 cron 表达式定时备份快照

容易踩的坑

默认端口 6379,与 Redis 相同,同机部署会端口冲突;Memcached 兼容 API 默认关闭,需用 --memcached_port 显式开启;Docker 默认用 /data 目录做快照,需用 -v 映射到宿主机持久化。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v2.1
  1. v2.1最新正式版2026-11-04 · 2026-11-04 16:10 UTC

    Dragonfly v2.1

    This release is important because starting from this version, it changes how teams can use our software in production. Starting from v2.1.0 the project moves from BUSL-1.1 to the Dragonfly Source-Available License (DSAL).

    For more details, please read https://www.dragonflydb.io/blog/introducing-dragonfly-enterprise

    Besides this much of the work is hardening. ACL enforcement is stricter, credentials are redacted from logs, and many crashes and deadlocks are fixed across blocking commands, tiered storage, Lua and search. Search gains index aliases, multi-attribute fields and punctuation-aware queries. There is also an experimental append-only-file (AOF) persistence mode, and a number of throughput and memory improvements.

    Highlights

    • Dragonfly's licence changes from BSL 1.1 to DSAL, starting with v2.1 (#8739).
    • The RESP IoLoopV2 is now enabled by default (#8576).
    • Search gains FT.ALIAS* commands, alias-aware queries and multiple attributes per field (#8556, #8649, #8604).

    Commands

    • Without --bind, Dragonfly now listens on :: on dual-stack hosts, serving IPv4 and IPv6 from one listener (#8682).
    • Added CLIENT TRACKINGINFO (#8497).
    • Added the lua_max_stall_ms flag, which kills Lua scripts that block their thread before writing (#8426).
    • Added the --list_compress_policy flag. --list_compress_dict_threshold is deprecated (#8008).
    • DEBUG OBJHIST now covers JSON, streams and sketches (#8656).
    • Added the io_threads and max_connected_clients_per_thread Prometheus metrics (#8701).
    • INFO expired_keys and evicted_keys are now cumulative across FLUSHDB/FLUSHALL and reset only by CONFIG RESETSTAT (#8562).

    Performance

    • During replica full sync, writes to buckets the snapshot has not yet reached skip forced early serialization. This now also works with a second replica and for EXPIRE-family commands (#8112).
    • DFLYCLUSTER GETSLOTINFO collects stats per shard round, with bounded memory (#8715).
    • The background sweep that flushes unowned slots after a migration is now throttled (#8641).
    • Inline single-shard transactions are faster, with [about 5% fewer cycles and about 8% fewer instructions] (#8609).
    • Added the opt-in --shard_sidekiq_queues flag so Sidekiq queues and their private queues share a shard (#8642).
    • Single-shard BLMOVE/BRPOPLPUSH completes in one hop when data is available (#8638).
    • Reduced the CPU overhead of cache-mode bumps (#8589).
    • Added edge_depth to --list_compress_policy (#8334).
    • Double formatting now uses dragonbox, [about 1.8–3.6x faster] (#8461).
    • OAHTable now shrinks its bucket array automatically (#8454).
    • V2 connections now flush replies right after a pipeline squash (#8431).
    • V2 parse-loop lookups are cached per parsing segment (#8230).
    • MGET and Memcache multi-get return large values zero-copy, and the borrow threshold is lowered to 8KB (#8420).
    • CLUSTER SLOTS and CLUSTER SHARDS batch their replies, [from about 7000 socket writes to fewer than 100 for 1024 ranges] (#8390).
    • Shard shutdown frees the whole heap in one operation (#8336).
    • SCAN now packs returned keys into a single buffer (#8314).
    • SCAN expiry checks and key extraction are faster (#8297).
    • The journal is turned off automatically on shards where nothing uses it (#8259).
    • Faster ASCII string decoding (#8295).
    • Tiered storage's external allocator frees pages in O(1) and [halves descriptor RAM from about 128MB to 64MB per TB] (#8527).

    Replication

    • Added Prometheus metrics for snapshot and replica-disconnect state (#8740).
    • S3 snapshot upload sockets are now paced to snapshot_egress_limit_bytes. Added --s3_upload_traffic_mark (#8719).

    Search

    • FT.CREATE now stores the INDEXMISSING, INDEXEMPTY and UNF flags. FT.INFO output is aligned with the reference (#8720).
    • FT.ALTER and FT.DROPINDEX accept index aliases (#8683).
    • Search commands resolve aliases created with FT.ALIASADD (#8649).
    • Added FT.ALIASADD,
  2. v2.0.22026-10-07 · 2026-10-07 21:47 UTC
    查看更新说明

    This is a patch release.

    What's Changed

    • Fixed a crash when DFLYMIGRATE was sent to a server that is not in cluster mode. It now returns the standard "Cluster is disabled" error (#8290).
    • Fixed a crash on glob patterns with many * wildcards in KEYS, SCAN/HSCAN/SSCAN/ZSCAN MATCH, ACL key patterns, PSUBSCRIBE and CONFIG GET. Matching is now iterative, so it no longer overflows the fiber stack, and it is also faster (#8350).
    • Fixed a crash in blocking commands when a watched key holds a value of the wrong type. The registered blocked keys are now cleaned up (#8305).
    • Fixed a crash when restoring an HNSW vector index while a key is being deleted concurrently (#8466).
    • Fixed ACL permission checks for commands that both read and write keys (such as COPY or LMOVE). Source keys are now checked for read access and destination keys for write access (#8249).
    • Fixed INFO persistence reporting rdb_bgsave_in_progress:1 forever after a BGSAVE. rdb_last_bgsave_status is now also updated when a background save finishes (#8459).
    • In emulated cluster mode, replicas now advertise the master's announced address in CLUSTER NODES/SLOTS/SHARDS, instead of the address passed to REPLICAOF (#8241).
    • The daily version check now also sends anonymous deployment info: architecture, I/O backend, cloud provider, thread count, kernel version, uptime and a maxmemory bucket. No keys, data, hostnames or addresses are sent. (#8469).

    Full Changelog: v2.0.0...v2.0.2

  3. v2.0.02026-09-16 · 2026-09-16 10:29 UTC
    查看更新说明

    Dragonfly v2.0.0

    We have been waiting three years to bump the major version.

    While this specific release does not add new major features by itself, it marks a significant milestone in our maturity, performance, and production readiness.

    Dragonfly v2.0.0 expands Redis and Valkey compatibility with Valkey 9 RDB loading, GEOSEARCHSTORE, and improved replication backlog controls. Performance work reduces connection-processing and memory-accounting overhead while adding tighter controls for defragmentation and buffer retention. Tiered storage, cluster migration, streams, compressed lists, and RESP3 behavior received substantial correctness improvements. This release also strengthens RESTORE validation against malformed or incompatible payloads.

    Highlights

    • Added Valkey 9 RDB support and GEOSEARCHSTORE. (#8251, #7984)
    • Reduced connection-accounting, parsing, buffering, and RDB serialization costs. (#8246, #8225, #8140, #8005)
    • Hardened RESTORE, cluster migration, tiered storage, streams, RESP3, and compressed-list handling. (#8260, #8240, #8026, #8015, #8085, #8014)

    Commands

    • Added GEOSEARCHSTORE with radius or box queries, sorting, limits, distance scores, ACL enforcement, and journaling. (#7984)
    • Added MEMORY DEFRAGMENT-SEGMENTS [threshold] to reclaim sparsely used DashTable pages and report page usage. (#7995)

    Performance

    • Refreshes Memcached parser memory usage once per batch and skips no-op pipeline squash refreshes. (#8246)
    • Skips reply-batch setup when no pipeline replies are in flight. (#8224)
    • Refreshes connection-memory telemetry once per parse cycle instead of after every pipelined command. (#8225)
    • Restores fast allocation-tracker rejection outside configured ranges and after trackers are cleared. (#8207)
    • Adds an opt-in shared RESP V2 read buffer per proactor, disabled by default. [Projected future reduction from about 800 MB to under 1 MB for 25K connections on 32 CPUs; not realized by this commit.] (#8145)
    • Adds configurable burst and cooldown limits for background defragmentation. [Example configuration limits defragmentation to approximately 1% of one CPU core.] (#8115)
    • Releases oversized RDB serializer buffers after flushing. [Retained capacity is capped at 4 MiB by default; previously a 512 MiB object could leave 512 MiB allocated.] (#8140)
    • Shrinks client input buffers after low usage and adds configuration and metrics. [Reduces the default maximum by 50%, from 64 KiB to 32 KiB.] (#8005)

    Replication

    • Loads Valkey 9 RDB hashes containing persistent and expiring fields. (#8251)
    • Retains replication backlog entries by age and memory budget, deprecating the fixed-length option. (#8039)

    Bug fixes

    • RESTORE rejects duplicate hash fields in HASH and HASH_LISTPACK payloads. (#8260)
    • SLOWLOG GET now returns 10 entries by default while preserving explicit counts and -1. (#8248)
    • Makes connection memory introspection constant time by caching mutable state usage. [Reduces connection memory accounting from O(n) to O(1).] (#8245)
    • Detects RESP commands after empty inline lines, fixing redis-cli --pipe sentinel timeouts. (#8244)
    • Retries cluster migration finalization when pausing clients times out. (#8240)
    • Decodes RedisShake RDB type 20 as a set listpack regardless of the footer version. (#8227)
    • Rejects RESTORE payloads whose declared lengths exceed the remaining input, preventing remote out-of-memory crashes. (#8222)
    • Defers container deletion during paused yielding RM iterations to prevent use-after-free. (#8210)
    • Prevents SORT LIMIT range overflow near 32-bit limits. (#8212)
    • Returns the Redis-compatible <index>: no such index FT.INFO error. (#8199)
    • Makes SORT ... STORE delete the destination and return 0 when the source is missing. (#8190)
    • Releases unused cached ParsedCommand entries in the V2 pipeline. (#8192)
    • Reports multi-key XREADGROUP errors in command argument order. (#8186)
    • Preserves co
  4. v1.40.22026-09-03 · 2026-09-03 08:58 UTC
    查看更新说明

    What's Changed

    Tiered storage (disk offload)

    • fix(tiering): Don't cool on load — values loaded during full sync / RDB-DFS load were incorrectly pushed into the cool-tier cache; loading is no longer treated as a candidate for cooling since it isn't client traffic.
    • fix(tiering): Replace the separate write-depth limit with a single tiered_max_pending_bytes cap that covers both in-flight reads and writes, and export read/write/total usage as metrics.
    • fix(tiering): Add tiered_serialization_inflight_bytes_cap — snapshot serialization now throttles/waits when there are too many outstanding tiered reads, preventing unbounded memory growth from delayed entries during snapshotting.
    • fix: Bound small-bins traversal with TraverseBySegmentOrder (same class of fix as DeleteExpiredStep in #8129), preventing entries from being skipped or revisited when the table resizes mid-scan; also exports additional tiering metrics/settings.
    • fix: Export small-bin entries-bytes usage in metrics/INFO.
    • feat(tiering): Add a background "repack scan" that repacks small-bins buckets with excessive wasted space; disabled by default (tiered_repack_scan_budget_us=0).

    Replication / journal

    • fix(server): Bound DeleteExpiredStep traversal with TraverseBySegmentOrder (#8129)
    • fix(server): Fix journal omit breaking on stash bucket (#8157)
    • fix(server): Split the "journal omit" optimization into two independent decisions — skipping forced snapshot serialization vs. skipping the journal write — since the former no longer requires the latter; also adds TTL propagation for EXPIRE writes that skip serialization.
    • backport(cluster): Fix memory-accounting bug and journal FLUSHSLOTS from inside the flush transaction, avoiding replication inconsistency during slot migration (#8061, backports #8032)

    Protocol

    • fix(facade): Reject memcached keys longer than the 250-byte protocol limit (#8213). Previously, a long key (e.g. written via the Redis port) could be echoed back unbounded in a memcached VALUE reply, overflowing the reply buffer.

    Advisory: it is advised to upgrade to this release due to the correctness bug with journaling #8157

  5. v1.40.12026-08-06 · 2026-08-06 06:54 UTC
    查看更新说明

    This is a patch release.

    What's Changed

    • Fixed connection-state handling in squashed pipelines. Commands following AUTH, SELECT, HELLO, CLIENT, or RESET now observe the updated connection state instead of stale authentication, database, or RESP protocol state (#8016).
    • Fixed compressed QList node memory accounting and defragmentation (#8011, #8014).

    Full Changelog: v1.40.0...v1.40.1

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    ci-tests Total pulls Monthly pulls Twitter URL

    Before moving on, please consider giving us a GitHub star ⭐️. Thank you!

    Other languages: 简体中文 日本語 한국어 Português ภาษาไทย

    Website • Docs • Quick Start • Community Discord • Dragonfly User Conference • Join the Dragonfly Community

    GitHub Discussions • GitHub Issues • Contributing • AI Agents Guide • Dragonfly Cloud

    The world's most efficient in-memory data store

    Dragonfly is an in-memory data store built for modern application workloads.

    Fully compatible with Redis and Memcached APIs, Dragonfly requires no code changes to adopt. Compared to legacy in-memory datastores, Dragonfly delivers 25X more throughput, higher cache hit rates with lower tail latency, and can run on up to 80% fewer resources for the same-sized workload.

    Contents

    Benchmarks

    We first compare Dragonfly with Redis on an m5.large instance, which is commonly used to run Redis due to its single-threaded architecture. The benchmark program runs from another load-test instance (c5n) in the same AZ using memtier_benchmark -c 20 --test-time 100 -t 4 -d 256 --distinct-client-seed

    Dragonfly shows comparable performance:

    1. SETs (--ratio 1:0):
    RedisDF
    QPS: 159K, P99.9: 1.16ms, P99: 0.82msQPS:173K, P99.9: 1.26ms, P99: 0.9ms
    1. GETs (--ratio 0:1):
    RedisDF
    QPS: 194K, P99.9: 0.8ms, P99: 0.65msQPS: 191K, P99.9: 0.95ms, P99: 0.8ms

    The benchmark above shows that the algorithmic layer inside DF that allows it to scale vertically does not take a large toll when running single-threaded.

    However, if we use a slightly larger instance (m5.xlarge), the gap between DF and Redis starts growing. (memtier_benchmark -c 20 --test-time 100 -t 6 -d 256 --distinct-client-seed):

    1. SETs (--ratio 1:0):
    RedisDF
    QPS: 190K, P99.9: 2.45ms, P99: 0.97msQPS: 279K , P99.9: 1.95ms, P99: 1.48ms
    1. GETs (--ratio 0:1):
    RedisDF
    QPS: 220K, P99.9: 0.98ms , P99: 0.8msQPS: 305K, P99.9: 1.03ms, P99: 0.87ms

    Dragonfly throughput capacity continues to grow with instance size, while single-threaded Redis is bottlenecked on CPU and reaches local maxima in terms of performance.

    If we compare Dragonfly and Redis on the most network-capable instance c6gn.16xlarge, Dragonfly showed a 25X increase in throughput compared to a single Redis process, crossing 3.8M QPS.

    Dragonfly's 99th percentile latency metrics at its peak throughput:

    opr6gc6gnc7g
    set0.8ms1ms1ms
    get0.9ms0.9ms0.8ms
    setex0.9ms1.1ms1.3ms

    All benchmarks were performed using memtier_benchmark (see below) with number of threads tuned per server and instance type. memtier was run on a separate c6gn.16xlarge machine. We set the expiry time to 500 for the SETEX benchmark to ensure it would survive the end of the test.

      memtier_benchmark --ratio ... -t <threads> -c 30 -n 200000 --distinct-client-seed -d 256 \
         --expiry-range=...
    

    In pipeline mode --pipeline=30, Dragonfly reaches 10M QPS for SET and 15M QPS for GET operations.

    Dragonfly vs. Memcached

    We compared Dragonfly with Memcached on a c6gn.16xlarge instance on AWS.

    With a comparable latency, Dragonfly throughput outperformed Memcached throughput in both write and read workloads. Dragonfly demonstrated better latency in write workloads due to contention on the write path in Memcached.

    SET benchmark
    ServerQPS(thousands qps)latency 99%99.9%
    Dragonfly🟩 3844🟩 0.9ms🟩 2.4ms
    Memcached8061.6ms3.2ms
    GET benchmark
    ServerQPS(thousands qps)latency 99%99.9%
    Dragonfly🟩 37171ms2.4ms
    Memcached2100🟩 0.34ms🟩 0.6ms

    Memcached exhibited lower latency for the read benchmark, but also lower throughput.

    Memory efficiency

    To test memory efficiency, we filled Dragonfly and Redis with ~5GB of data using the debug populate 5000000 key 1024 command, sent update traffic with memtier, and kicked off the snapshotting with the bgsave command.

    This figure demonstrates how each server behaved in terms of memory efficiency.

    Dragonfly was 30% more memory efficient than Redis in the idle state and did not show any visible increase in memory use during the snapshot phase. At peak, Redis memory use increased to almost 3X that of Dragonfly.

    Dragonfly finished the snapshot faster, within a few seconds.

    For more info about memory efficiency in Dragonfly, see our Dashtable doc.

    Configuration

    Dragonfly supports common Redis arguments where applicable. For example, you can run: dragonfly --requirepass=foo --bind localhost.

    Dragonfly currently supports the following Redis-specific arguments:

    • port: Redis connection port (default: 6379).
    • bind: Use localhost to only allow localhost connections or a public IP address to allow connections to that IP address (i.e. from outside too). Use 0.0.0.0 to allow all IPv4.
    • requirepass: The password for AUTH authentication (default: "").
    • maxmemory: Limit on maximum memory (in human-readable bytes) used by the database (default: 0). A maxmemory value of 0 means the program will automatically determine its maximum memory usage.
    • dir: Dragonfly Docker uses the /data folder for snapshotting by default, the CLI uses "". You can use the -v Docker option to map it to your host folder.
    • dbfilename: The filename to save and load the database (default: dump).

    There are also some Dragonfly-specific arguments:

    • memcached_port: The port to enable Memcached-compatible API on (default: disabled).

    • keys_output_limit: Maximum number of returned keys in keys command (default: 8192). Note that keys is a dangerous command. We truncate its result to avoid a blowup in memory use when fetching too many keys.

    • dbnum: Maximum number of supported databases for select.

    • cache_mode: See the novel cache design section below.

    • hz: Key expiry evaluation frequency (default: 100). Lower frequency uses less CPU when idle at the expense of a slower eviction rate.

    • snapshot_cron: Cron schedule expression for automatic backup snapshots using standard cron syntax with the granularity of minutes (default: ""). Here are some cron schedule expression examples below, and feel free to read more about this argument in our documentation.

      Cron Schedule ExpressionDescription
      * * * * *At every minute
      */5 * * * *At every 5th minute
      5 */2 * * *At minute 5 past every 2nd hour
      0 0 * * *At 00:00 (midnight) every day
      0 6 * * 1-5At 06:00 (dawn) from Monday through Friday
    • primary_port_http_enabled: Allows accessing HTTP console on main TCP port if true (default: true).

    • admin_port: To enable admin access to the console on the assigned port (default: disabled). Supports both HTTP and RESP protocols.

    • admin_bind: To bind the admin console TCP connection to a given address (default: any). Supports both HTTP and RESP protocols.

    • admin_nopass: To enable open admin access to console on the assigned port, without auth token needed (default: false). Supports both HTTP and RESP protocols.

    • cluster_mode: Enables cluster mode (default: ""). Supports emulated and yes.

    • cluster_announce_ip: The IP that cluster commands announce to the client.

    • announce_port: The port that cluster commands announce to the client, and to replication master.

    Example start script with popular options:

    ./dragonfly-x86_64 --logtostderr --requirepass=youshallnotpass --cache_mode=true -dbnum 1 --bind localhost --port 6379 --maxmemory=12gb --keys_output_limit=12288 --dbfilename dump
    

    Arguments can also be provided via:

    • --flagfile <filename>: The file should list one flag per line, with equal signs instead of spaces for key-value flags. No quotes are needed for flag values.
    • Setting environment variables. Set DFLY_x, where x is the exact name of the flag, case sensitive.

    For more options like logs management or TLS support, run dragonfly --help.

    Design decisions

    Novel cache design

    Dragonfly has a single, unified, adaptive caching algorithm that is simple and memory efficient.

    You can enable caching mode by passing the --cache_mode=true flag. Once this mode is on, Dragonfly will evict items least likely to be accessed in the future, but only when it is near the maxmemory limit.

    Expiration deadlines with relative accuracy

    Expiration ranges are limited to 268435455 seconds (2^28 - 1, about 8.5 years). Key expiration deadlines beyond that limit are clamped to it, while hash field expirations reject them. If this is not suitable for your use case, get in touch or open an issue explaining your case.

    For more detailed differences between Dragonfly expiration deadlines and Redis implementations, see here.

    Native HTTP console and Prometheus-compatible metrics

    By default, Dragonfly allows HTTP access via its main TCP port (6379). That's right, you can connect to Dragonfly via Redis protocol and via HTTP protocol — the server recognizes the protocol automatically during the connection initiation. Go ahead and try it with your browser. HTTP access currently does not have much info but will include useful debugging and management info in the future.

    Go to the URL :6379/metrics to view Prometheus-compatible metrics.

    The exported Prometheus metrics are compatible with the Grafana dashboard, see here.

    Important! The HTTP console is meant to be accessed within a safe network. If you expose Dragonfly's TCP port externally, we advise you to disable the console with --primary_port_http_enabled=false or --noprimary_port_http_enabled.

    Background

    Dragonfly started as an experiment to see how an in-memory datastore could look if it was designed in 2022. Based on lessons learned from our experience as users of memory stores and engineers who worked for cloud companies, we knew that we need to preserve two key properties for Dragonfly: Atomicity guarantees for all operations and low, sub-millisecond latency over very high throughput.

    Our first challenge was how to fully utilize CPU, memory, and I/O resources using servers that are available today in public clouds. To solve this, we use shared-nothing architecture, which allows us to partition the keyspace of the memory store between threads so that each thread can manage its own slice of dictionary data. We call these slices "shards". The library that powers thread and I/O management for shared-nothing architecture is open-sourced here.

    To provide atomicity guarantees for multi-key operations, we use the advancements from recent academic research. We chose the paper "VLL: a lock manager redesign for main memory database systems” to develop the transactional framework for Dragonfly. The choice of shared-nothing architecture and VLL allowed us to compose atomic multi-key operations without using mutexes or spinlocks. This was a major milestone for our PoC and its performance stood out from other commercial and open-source solutions.

    Our second challenge was to engineer more efficient data structures for the new store. To achieve this goal, we based our core hashtable structure on the paper "Dash: Scalable Hashing on Persistent Memory". The paper itself is centered around the persistent memory domain and is not directly related to main-memory stores, but it's still most applicable to our problem. The hashtable design suggested in the paper allowed us to maintain two special properties that are present in the Redis dictionary: The incremental hashing ability during datastore growth and the ability to traverse the dictionary under changes using a stateless scan operation. In addition to these two properties, Dash is more efficient in CPU and memory use. By leveraging Dash's design, we were able to innovate further with the following features:

    • Efficient record expiry for TTL records.
    • A novel cache eviction algorithm that achieves higher hit rates than other caching strategies like LRU and LFU with zero memory overhead.
    • A novel fork-less snapshotting algorithm.

    Once we had built the foundation for Dragonfly and we were happy with its performance, we went on to implement the Redis and Memcached functionality. We have to date implemented ~185 Redis commands (roughly equivalent to Redis 5.0 API) and 13 Memcached commands.

    And finally, Our mission is to build a well-designed, ultra-fast, cost-efficient in-memory datastore for cloud workloads that takes advantage of the latest hardware advancements. We intend to address the pain points of current solutions while preserving their product APIs and propositions.

    Contributors

    Thanks to all the contributors to the Dragonfly project!