1 台のマシン、16 コア、ループバック。すべての数字は、リポジトリの bench/ から再現できます。何かを決める前に、最後の 2 行を読んでください——速さが乗り換える理由にならないのは、その 2 行です。
コネクション 50、小さな値。5 回実行した中央値です。ベンチマーククライアントが報告する速度ではなく、各サーバー自身のコマンドカウンタを、3 秒間の定常状態で数えました。
| kevy 6.3.0 | Redis 8.10.1 | valkey 9.1.2 | Dragonfly 1.40.2 | Redis 8.10.1 比 | |
|---|---|---|---|---|---|
| GET | 7,489,119 | 5,631,398 | 2,980,764 | 2,845,704 | *1.33× |
| SET | 6,824,662 | 2,567,607 | 1,683,227 | 1,943,358 | *2.66× |
| INCR | 6,753,558 | 3,294,927 | 2,279,738 | 1,953,406 | *2.05× |
| SADD | 6,152,617 | 3,753,131 | 2,214,659 | 1,899,967 | *1.64× |
| HSET | 4,002,580 | 2,966,288 | 1,857,532 | 1,773,498 | *1.35× |
| LPUSH | 3,142,699 | 2,860,306 | 1,859,265 | 1,505,141 | !1.10× |
| ZADD | 3,242,967 | 2,818,626 | 1,786,230 | 1,794,335 | !1.15× |
LPUSH は Redis 8.10.1 より 10%、ZADD は 15% 速いだけです。この差では、勝敗を決めるのはエンジンではなく、値のサイズとキーの分布です。リストやソート済みセットがホットパスなら、自分のワークロードで測ってください。速さを理由に乗り換えてはいけません。この 2 行の色は、そのために付けてあります。
ループバックです。ここにネットワークはありませんが、実際の運用で待たされる相手は、たいていネットワークです。GET が 2.6 倍速いエンジンでも、レイテンシの大半が回線なら、p99 が 2.6 倍良くなることはありません。
値が小さいです。1 値あたり 64 KB になると、全体がカーネルの TCP パスに律速され、差は 1 桁台まで縮まります。大きなブロブを保存するなら、この数字は、あなたの話ではありません。
1 台のマシンです。kevy にクラスタモードはありません。1 台では足りないことが問題なら、このページのどの数字も助けになりません。
タブに実際に配るもの。
| サイズ | ||
|---|---|---|
| kevy.wasm | 1442 KB | エンジン本体、非圧縮 |
| gzip 後 | 481 KB | 回線を流れる量 |
| コールドスタート | < 20 ms | コンパイルとインスタンス化、キャッシュが温まった状態 |
小さな同期の読み取りでは、localStorage が kevy に勝ちます。今後もそうです——あれはページ自身のアドレス空間にあるマップです。kevy が勝つのは、そもそも localStorage を選ぶべきでない理由のほうです。本物の TTL、5 MB の上限がないこと、値が文字列ではなくバイト列であること、書き込みがメインスレッドを止めないこと。
git clone https://github.com/goliajp/kevy && cd kevy
# four-way: kevy, Redis 8, valkey, Dragonfly
bash bench/arena.sh
# the regression gate CI runs on every push
bash bench/perfgate.shスクリプトは 2 つ。このページの内容は、すべてそこから出てきます。