Email me

Dev · · 8 min read · Matt Busel

Filed under Rust App development

redis-rs 2.0 fixes a 68% speed tax. 59% of Rust won't get it

redis-rs 2.0 fixes a 68% speed tax. 59% of Rust won't get it
On this page · 8 sections
  1. Key numbers
  2. The fix is one boolean, and it took until 2.0
  3. 59% of redis downloads are versions from before 1.0
  4. Who is holding Rust on old redis
  5. The Rust compiler team already paid for this once
  6. Follow the money: Redis pays, Valkey users win too
  7. What this means for you
  8. Sources

Short answer: redis-rs 2.0.0-rc.1, the Rust client for Redis and Valkey, shipped on Oct 24 2026 with TCP_NODELAY turned on by default. A Redis performance engineer measured the old default costing up to 68% of throughput on a busy async connection. Our pull of crates.io says most of Rust will not see that fix for a long time: 59.3% of the last 30 days of redis downloads went to pre-1.0 versions, and only 1 of the 1,552 crates that depend on redis turns the fast setting on.

TL;DR: The redis crate did 13.6 million downloads from Sep 25 to Oct 25 2026, and 8.1 million of them (59.3%) were 0.x versions, led by 0.27.6 from December 2024 at 3.18 million. Of 1,552 crates that depend on redis, 993 (64%) still require a 0.x version in their newest release, including poem, actix-session and risc0-zkvm. In April the Rust compiler team found 574 crates breaking on old redis versions and had to ask for five backport releases. If your service talks to Redis from Rust, you can turn the fix on today with one line, on any version.

Key numbers

WhatNumberSource, checked Oct 25 2026
Throughput lost to the old default (2 to 32 concurrent tasks, one async connection)39% to 68%redis-rs PR #2196
Median latency cut by turning TCP_NODELAY on27% to 46%redis-rs PR #2196
redis crate downloads, Sep 25 to Oct 25 202613,633,318crates.io API, our pull
Share of those on 0.x (pre-1.0)59.3%crates.io API, our pull
Top single version, redis 0.27.6 (Dec 3 2024)3,178,745 (23.3%)crates.io API, our pull
Crates that depend on redis1,552crates.io reverse dependencies
Of those, newest release still requires 0.x993 (64%)crates.io API, our pull
Of those, enable the tcp_nodelay feature1crates.io API, our pull
Crates broken on old redis in a Rust compiler experiment574redis-rs issue #2054
redis lifetime downloads119,989,174crates.io
Animated bar chart of the 1,552 Rust crates that depend on redis: 993 require a 0.x version, 557 require 1.x, 0 require 2.0, and 1 turns on the tcp_nodelay feature.
Rust crates on redis by the version their newest release requires. crates.io API, our pull Oct 25 2026. Rendered with our game engine.

The fix is one boolean, and it took until 2.0

TCP_NODELAY is a socket flag that turns off Nagle's algorithm. Plain version: Nagle makes your computer hold small outgoing messages for a moment so it can bundle them, which is great for a 1984 telnet session and terrible for a database client that already bundles its own writes.

In redis 1.8.0, the current stable release, TcpSettings::default() sets nodelay: false. We opened the published crate source to check. In 2.0.0-rc.1 the same line reads nodelay: true, with a comment telling you how to turn Nagle back on if you really want it.

The change came from Filipe Oliveira, who lists himself as performance at Redis. His issue #2195 and PR #2196 are the kind of receipts we love: two bare-metal hosts on a dedicated 1 GbE link, three repetitions, kernel samples and packet captures.

  • Throughput up 39% to 68% at 2 to 32 concurrent tasks on one multiplexed async connection, with and without mTLS.
  • Median latency down 27% to 46%, and the p99.99 tail went from spikes of 4.6 ms to 930 microseconds or less.
  • Under the old default, application bytes were stuck waiting in 88.8% of kernel samples, versus 15.4% with the flag on.
  • Loopback tests and one-command benchmarks never show it, which is exactly why this hid for years.

The PR also says Jedis, Lettuce, go-redis and StackExchange.Redis all ship with TCP_NODELAY on. So Rust, the language people pick for speed, had the slow default among the big Redis clients. That is lowkey hilarious.

It merged on Jul 4 2026. It shipped to users on Oct 24, as a release candidate of a new major version. Seven 1.x releases went out in between with the slow default still in them. A one-line default that every peer already uses got treated like a breaking change, and that choice is the whole story below.

59% of redis downloads are versions from before 1.0

We pulled per-version download counts for the 90 most downloaded redis releases from the crates.io API, which covers 99.99% of the crate's 32.1 million downloads in the last 90 days. Then we grouped the last 30 days by version line.

Horizontal bar chart of redis crate download share from Sep 25 to Oct 25 2026 by version line: 1.x 40.7%, 0.27 23.5%, 0.32 12.6%, 0.23 6.3%, 0.25 6.3%, 0.21 3.7%, 0.29 2.6%, older 0.x lines 4.3%.
59.3% of 13.6 million redis downloads in 30 days were pre-1.0 versions. crates.io API, our pull Oct 25 2026.

The 1.x line, the one maintainers actually support, is 40.7% of downloads. Everything else is 0.x. The single most downloaded version of redis right now is 0.27.6, published Dec 3 2024, with 3.18 million downloads in a month. That is more than the three newest 1.x releases combined.

Downloads are mostly CI and build machines, not people, so read this as "how many builds pulled this version", not "how many companies". It is still the best public signal there is for what code is actually running, and it is not close.

The trend is moving the right way, just slowly. In the week of Jul 27, 1.x did 0.63 million downloads to 0.x's 1.34 million. By the week of Oct 13 it was 1.46 million to 1.78 million. 1.x more than doubled, and 0.x still grew 33% because old lockfiles keep getting rebuilt.

Line chart of weekly redis crate downloads in millions: 0.x versions rose from 1.34 in the week of Jul 27 to 1.78 in the week of Oct 13, while 1.x rose from 0.63 to 1.46.
1.x more than doubled, but 0.x still grew 33%. crates.io API, our pull Oct 25 2026.

Our bet: 1.x passes 0.x in weekly downloads before the end of November. 2.0 will start that race again from zero, and the 0.x pile will still be there when 3.0 ships.

Who is holding Rust on old redis

crates.io lists 1,552 crates that depend on redis. For each one we read the redis requirement in its newest release. 993 of them (64%) still require a 0.x version. 557 require 1.x. Zero require 2.0, which is fair, since it is a day old.

This is not just abandoned hobby code. Of the 630 dependent crates that shipped a release in the last 90 days, 248 (39%) still pin 0.x. These are the biggest names by downloads of their newest release:

Horizontal bar chart of popular crates whose newest release requires old redis, by downloads of that release: testcontainers-modules (tests only) ^0.32 11.0M, poem 3.1 ^0.32 2.1M, actix-session 0.11 ^0.32 0.66M, r2d2_redis ^0.20 0.5M, rocket_contrib ^0.9 0.34M, sea-streamer-redis ^0.25 0.18M, risc0-zkvm ^0.30 0.17M, redlock ^0.23 0.17M, celery ^0.22 0.14M.
The crates that pin Rust to pre-1.0 redis. crates.io reverse dependencies, our pull Oct 25 2026.
  • poem 3.1.12, one of the popular Rust web frameworks, requires redis ^0.32 for its optional Redis features.
  • actix-session 0.11.0, the session middleware for actix-web, requires ^0.32.
  • risc0-zkvm 3.0.6, a zero-knowledge VM published in July 2026, requires ^0.30.
  • testcontainers-modules 0.15.0 requires ^0.32.2, but only for its own tests, so it does not pin your build.
  • rocket_contrib 0.4.11 requires ^0.9 and still pulls a redis from 2018 into builds.
  • celery, redlock, r2d2_redis and sea-streamer-redis sit on 0.20 to 0.25.

The good guys exist too. deadpool-redis requires ^1.6, bb8-redis ^1.0.0 and loco-rs ^1. If your pool crate is one of those, you are one minor bump from 1.x.

And here is the stat that made us laugh out loud. In the 0.x era, the fast setting was an opt-in Cargo feature called tcp_nodelay. Out of 1,552 dependents, exactly one enables it: websurfx. Everyone else shipped the slow path by default because nobody reads feature lists. Default settings are destiny.

Stat card: 1 of 1,552 Rust crates that depend on redis switch on its tcp_nodelay feature.
Default settings are destiny. crates.io reverse dependencies, our pull Oct 25 2026.

The Rust compiler team already paid for this once

This is not just a speed problem. In April 2026, Rust compiler team member WaffleLapkin (RustNL) opened issue #2054. The compiler wants to change how the never type falls back, a long-planned language change, and a test run over the ecosystem found it breaking a pile of crates that depend on old redis.

The count in that issue: 574 broken crates, spread across redis 0.13 to 0.25. 0.24.0 alone broke 117 and 0.25.4 broke 112. The fix already existed in newer redis. The old versions just never got it.

Bar chart of 574 crates broken in a Rust compiler never-type experiment by the redis line they use: 0.13 4, 0.14 2, 0.15 13, 0.16 4, 0.17 7, 0.18 2, 0.19 7, 0.20 36, 0.21 95, 0.22 45, 0.23 99, 0.24 117, 0.25 143.
Old redis versions broke 574 crates in a compiler test run. redis-rs issue #2054, Apr 24 2026, our grouping Oct 25 2026.

So the compiler team asked the redis-rs maintainers to cut patch releases for dead lines, and they did: 0.21.8, 0.22.4, 0.23.5, 0.24.1 and 0.25.5 all shipped in May 2026, five months after 1.0. Five releases of code that nobody is supposed to be running, so that a language change would not break the people who never upgraded.

That is the real cost of "0.x forever". It does not land on the lagging crates. It lands on the maintainers, the compiler team and you, the person whose build broke on a toolchain update.

Follow the money: Redis pays, Valkey users win too

Here is the part that gets spicy. Redis 8 is tri-licensed under RSALv2, SSPLv1 or AGPLv3, per the Redis LICENSE file. That licensing fight is why AWS and friends backed Valkey, the BSD-licensed fork, now at 27,508 GitHub stars against Redis's 77,093.

redis-rs itself stays on a BSD-style license, describes itself as a client for "Redis, Valkey and any other RESP compliant DB server", and its CI runs against both. Even the crates.io keywords list "valkey".

So the speed fix came from a Redis Inc. performance engineer, and it speeds up Valkey users exactly as much. We read that as Redis keeping the client neutral because the client is where Rust developers actually meet the brand. Nobody at Redis will say it that way, but owning the default client is worth more than any one benchmark war.

The losers are the framework maintainers who never bumped. Every week a pinned 0.x stays in poem or actix-session, every app on top of it inherits a slower client, a compiler-breakage risk and a support window that already closed. That is not a Redis problem. That is a Rust ecosystem culture problem, and it is giving "1.0 is a scary number".

What this means for you

You do not have to wait for 2.0. Check what you run first:

cargo tree -i redis

On redis 1.x, turn the flag on where you build the client. set_tcp_settings and TcpSettings::set_nodelay are both in 1.8.0:

use redis::{io::tcp::TcpSettings, IntoConnectionInfo};

let info = "redis://127.0.0.1/"
    .into_connection_info()?
    .set_tcp_settings(TcpSettings::default().set_nodelay(true));
let client = redis::Client::open(info)?;

On redis 0.x, it is one Cargo feature: redis = { version = "0.27", features = ["tokio-comp", "tcp_nodelay"] }. Then plan the move to 1.x, because 2.0 is coming and the support window for your line is already shut.

Benchmark it on a real network, not localhost. The PR is clear that loopback hides the effect. More Rust data pieces live on our Rust hub, the Rust topic page and our crates. We also counted how much of Rust still lives on GitHub and what crates.io download counts really measure.

If the redis upgrade breaks your build, hand it to us. Our $99 paid fix does the 0.x to 1.x move for you, and it is fixed within 24 hours or a full refund: get the upgrade done.

Sources

First published here on tensorust.com on Oct 25, 2026. Related: Rust hub, Rust, Our crates, GitHub outages and Rust.

Up next

More on RustPick a UUIDv7 library that keeps order: 10 tested, .NET fails 50%We tested 10 UUIDv7 libraries with 1M IDs each and a clock jump. .NET put 50% out of order, uuid6 ran 16.6 min ahead. The 2 that passed, plus free data.Read it next →

Cite this

Free to cite and reuse under CC BY 4.0 with a link back. How it was collected: methods. Spotted an error? Corrections.

Did this answer your question?

Get the next one by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

What are people saying about this? Read and post on The Floor →

More: the author, related reading, share this, a free game

Try it yourself · Rust dev?

Check a crate before you depend on it

Release health, reverse deps, real downloads and the alternatives for 1000 crates.

In The Manual: on this topic

Explainers answer one question, short answer first. Guides walk you through it step by step.

Open The Manual →

Read next

Free tool: iPhone app cost calculator → Pick an app type and features, get an honest budget range.

All articles →

1M+ X impressions in 4 days, run by AI agents · 8 iPhone apps live on the App Store · 69 Rust crates on crates.io · 520 GitHub stars · O'BLOCK out now, free on Steam

Built by Matthew Busel · code on github.com/Mattbusel · numbers as of Oct 22, 2026, click any to check

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ