It was two in the morning when the on-call channel for a cross-border e-commerce platform lit up. The flash sale had only been live for thirty minutes, and CPU usage on the Redis cache instance had already spiked past the alert threshold. Response times went from tens of milliseconds to two or three full seconds. The engineer on duty scaled up instances while quietly wondering how something that survived last week’s load test could buckle this fast once real traffic hit.
This scenario is not rare for teams running high-concurrency systems. Redis has been around for well over a decade and is practically synonymous with “cache” at this point. It is mature, stable, has a massive ecosystem, and every language has a ready-made client library. Cloud providers all offer managed versions. But Redis also carries a limitation baked into its design from day one: a single-threaded execution model. No matter how many cores your server has, command processing in Redis fundamentally runs on one thread while the rest of the cores mostly sit idle. That was fine years ago when data volumes and QPS were modest, but at today’s scale, where millions of queries per second is not unusual, that single-core ceiling has become the reason more than a few engineering teams lose sleep.
That is the backdrop against which Dragonfly emerged. It has already picked up more than thirty thousand stars on GitHub, and its tagline is blunt: “A modern replacement for Redis and Memcached.” It sounds like another project chasing benchmark numbers, but the more interesting question is what problem it actually solves, and where it asks you to pay a price in return. This piece puts the two side by side to figure out which teams and which situations each one actually fits.
Starting With Protocol Compatibility
The scariest part of any database migration usually is not the performance gap, it is the cost of switching. If moving to a new database means rewriting every piece of client code, most teams would rather live with an existing bottleneck than risk a migration. The Dragonfly team clearly thought this through from the start: instead of inventing a new protocol, they chose full compatibility with both the Redis and Memcached wire protocols.
Concretely, Dragonfly implements Redis’s RESP protocol and also supports the Memcached protocol. That means if you are currently using redis-py, ioredis, Jedis, or any other mainstream client library, in theory you do not need to change a single line of business logic. You just point your connection string at the Dragonfly instance instead. This drop-in replacement positioning removes the single biggest hesitation in a migration decision: you do not have to worry about tearing down your entire application-layer connection and serialization logic just because you swapped databases.
That said, protocol compatibility does not mean every command is a perfect match. Redis has accumulated a huge command surface over the years, including some fairly niche module features (think RedisSearch or RedisGraph-style extensions). Dragonfly focuses on compatibility for core data structures and commonly used commands. If your workload leans heavily on obscure modules or elaborate Lua scripting, it is worth auditing command coverage before migrating rather than assuming “protocol compatible” means “everything just works.”
Single-Threaded vs Multi-Threaded: Where the Real Difference Lies
Redis’s single-threaded model was not a mistake, it was a deliberate tradeoff made at the time. Running single-threaded means you avoid complex lock contention, and every command executes atomically without the risk of concurrent writes causing data races. That is a big part of why Redis has such a strong reputation for being simple and reliable. Redis’s own team eventually recognized this bottleneck and added multi-threaded I/O handling for networking, but the core command execution path remains single-threaded, and that is a hard architectural constraint to escape.
Dragonfly took a different path. It uses a shared-nothing multi-threaded architecture, splitting data into shards where each thread independently owns reads and writes for its portion, with threads avoiding shared state and lock contention as much as possible. The design borrows ideas from another open source project called seastar, aiming to actually put every CPU core to work processing requests instead of leaving most of them idle the way Redis does.
This architectural difference shows up clearly in benchmark reports: under high-concurrency write workloads on multi-core servers, Dragonfly’s own published benchmarks show higher throughput and lower latency jitter compared to Redis. There is a caveat worth flagging here though. Results from this kind of benchmark depend heavily on the test environment, dataset size, and choice of commands. The numbers a vendor publishes and the numbers you get from your own production traffic pattern are unlikely to match exactly. If you are making a real selection decision, the safest approach is running a side-by-side load test with your own actual traffic model rather than taking either party’s published benchmark at face value.
Memory Management: The Part You Cannot See
Beyond throughput, memory efficiency is another dimension that is easy to underestimate. When Redis handles large numbers of small objects, each object carries a certain amount of metadata overhead (an object header, expiration field, reference count, and so on), which produces what is commonly called memory bloat. When your workload involves storing millions or tens of millions of small key-value pairs, that hidden overhead accumulates into something substantial, and plenty of teams get caught off guard by it the first time they do real memory capacity planning.
Dragonfly made targeted optimizations to memory management, using a more compact data structure layout. The project claims meaningfully lower memory usage than Redis when storing large volumes of small objects. For teams sensitive to memory costs and needing to cache large amounts of fine-grained data (say, storing a small piece of state per user or per session), this could translate into real infrastructure cost savings. That said, the magnitude of this advantage depends heavily on the specific data structure and value size in play. Plain strings behave differently from complex hashes or sets, so it is not a blanket claim that applies uniformly everywhere.
Dragonfly’s persistence design is also worth mentioning. Redis’s combination of RDB snapshots and AOF logs traditionally requires forking a child process to perform copy-on-write when saving a snapshot of a large dataset. If the instance’s memory footprint is already large, that fork operation itself can cause brief latency spikes, a pain point that has been discussed at length in the Redis community for years. Dragonfly redesigned its snapshotting mechanism specifically to reduce the impact on live request latency while a snapshot is being saved. This is a targeted fix for a known pain point, and if your workload is especially sensitive to latency jitter (real-time trading, game state synchronization, that sort of thing), this improvement may matter more than raw throughput numbers.
Licensing: An Easy-to-Overlook but Very Real Issue
Beyond the technical parameters, there is one more issue engineers often overlook that legal and procurement teams care about a great deal: the open source license.
Redis itself has been through a licensing shakeup. In its earlier years, Redis used the fairly permissive three-clause BSD license, but starting from a certain version, Redis Labs (later renamed Redis) adjusted the licensing for parts of the core project and its modules, moving toward a stricter combination of license terms. That change stirred up real debate in the open source community at the time, and some cloud providers went as far as forking their own community-maintained versions (the Valkey project, formed under the Linux Foundation, came out of exactly this situation). This history is a useful reminder that database selection cannot be purely a technical exercise. Licensing shifts carry their own long-term risk, particularly if your product needs to serve enterprise customers or involves redistributing or reselling a managed service.
Dragonfly uses the Business Source License (BSL). The core logic of BSL is that the code is open and visible, you can freely read it, modify it, and deploy it within your own business, but if you want to use it to offer competitive commercial services (put plainly, spin up your own cloud offering selling managed Dragonfly instances), you need additional commercial licensing. BSL terms typically include a “converts to a permissive license after some period” clause, for instance automatically becoming Apache 2.0 after a set number of years.
For the vast majority of teams that are simply deploying Dragonfly on their own infrastructure to cache or store data for their own application, BSL should not create any additional compliance burden, and you can use it just like any other open source software. But if your company is itself a cloud service provider, or you have plans to resell a Dragonfly-based service down the line, it is worth reading the specific license terms carefully before proceeding, and checking with legal counsel where needed to understand where the boundaries are.
Ecosystem Maturity: A Reality Younger Projects Cannot Skip
Beyond the technical highlights, there is another side to this that time simply cannot fake: the ecosystem.
Redis has been running in production for well over a decade, and that decade has produced far more than just a reputation for stability. The monitoring tooling built around Redis (dedicated Grafana dashboards, Prometheus exporters), management tools, clustering solutions (Redis Cluster, Redis Sentinel), the module ecosystem (RedisJSON, RedisSearch, RedisTimeSeries), and countless production-tested best practices and postmortems make up a deep, hard-to-replicate moat. When you hit a strange issue in production, chances are someone has already run into it and posted a fix on Stack Overflow or in a GitHub issue. That kind of accumulated “someone already hit this pothole” value is hard to capture in a benchmark report, but it matters enormously when you are actually operating a system day to day.
Dragonfly, as a considerably younger project, is protocol-compatible with Redis and can reuse most existing client libraries, but the tooling, community knowledge base, and managed cloud offerings built around Dragonfly itself are still catching up. That does not make it unreliable, but it does mean that if your team has limited ops bandwidth and relies heavily on community documentation and existing tools to troubleshoot, choosing a younger project means you will more often be on your own, reading source code or filing GitHub issues, rather than finding a ready answer with a quick search.
So Which One Should You Actually Choose
Putting all of this together, the answer is not hard to reach, because this is not really a question of which one is “better.” It comes down to where each project chose to make its tradeoffs.
If your team already runs Redis stably in production, your business leans heavily on stability, ecosystem maturity, and established operational tooling, and your current performance bottleneck has not yet reached the point of actually keeping the team up at night, then staying within the Redis ecosystem and scaling through sensible sharding, clustering, and read-write separation is probably the safer call. There is no reason to take on the uncertainty of a newer project to preempt a performance problem you have not actually run into yet.
But if your team is dealing with a real single-thread CPU bottleneck, your monitoring dashboards show a Redis instance pegging one core while the rest sit idle, your workload involves large amounts of small objects causing real memory bloat, and you are not in a situation that would run into BSL’s boundaries (like reselling a managed service), then the protocol compatibility Dragonfly offers gives you a low-cost way to actually test the question: on the same hardware, does it really deliver higher throughput and lower latency jitter.
The safest move is always to take your own real traffic pattern, spin up a Dragonfly instance in a test environment, and run a side-by-side load test, rather than letting any single benchmark report make the decision for you. Because what lights up the on-call channel at two in the morning has never been a GitHub star count. It is that latency graph that just will not come back down.



