似乎总有几个项目声称他们已经建立了"世界上最快的键/值存储",有时使用的短语甚至更加离谱,比如以下项目:
而根据国外的基准测试结果(30 个线程,每个线程 1 个客户端使用 GET/SET),很明显有些项目夸大其词了,我们来看一下实际的性能对比:
1. Redis:112,100 / 99,892
2. KeyDB:288,931 / 282,997
3. Dragonfly:408,322 / 392,446
4. Skytable:619,992 / 676,091
我愿意将 Redis 将称为原始键
/值存储(在 memcached 之后),因为它是最古老且使用最广泛的内存数据库。作为 Redis 的长期追随者,我确实知道它是单线程的(并且从 6.0 开始使用 io-threads),因此与上面列出的其他多线程存储相比,它的吞吐量至少在某种程度上肯定要小。 但 Redis 最大的优点是:它是这里所有系统中功能最完整的,也是最古老的。
KeyDB 宣称是Redis 的多线程分支,速度提高了 5 倍
。我真的很喜欢这个想法,因为我之前在同一个节点上运行了多个 Redis 实例,并像“单节点集群”一样代理它们,这样做的原因就是为了提高 CPU 利用率。单个 KeyDB 实例可以取代不需要的代理功能,因此很多人放弃了 Redis 来使用 KeyDB。
Dragonfly 声称它比 Redis 快 25 倍(很多开发者表示无法重现),并且官网表示 Dragonfly 可能是宇宙中最快的内存存储
。它还支持 Redis/Memcache 的命令,但我觉得它很有趣主要是因为性能。此外,大家都想知道为什么它更快,它的官网清楚地概述了底层架构。
Dragonfly 和 Redis 功能对比
Dragonfly | Redis | |
---|---|---|
适配 Redis API | ✅ | ✅ |
快照持久化 | ✅ | ✅ |
Lua | 5.4.4 | 5.1 |
每个实例提供的 QPS | 3M | 200K |
Async core | ✅ | |
LRFU eviction | ✅ | |
适配 Memcached API | ✅ | |
支持云原生 Open Telemetry 协议 | ✅ |
在寻找用 Rust 编写的项目时发现它,它同样声称它非常快
。 Skytable 的“实验基准”声称它比 Redis 快 10 倍左右,比 KeyDB 快 2-3 倍。我没有听说过 Skytable,而且它似乎没有被广泛的使用。
Redis 不需要过多介绍,可以说在生产系统上使用非常稳定。 KeyDB 似乎"足够稳定”,而且 Snapchat 等企业已经使用它。暂时没有发现 Dragonfly vs Skytable 的基准测试。当然, Redis、KeyDB 和 Skytable 最好的点可能是它们不会对它们运行的系统做出任何离谱的假设。
本文亦通过 NoOne 的个人博客 发表。