TL; DR :シングルスレッドはredisをよりシンプルにし、redisは依然としてIOバウンドです。
メモリはI/Oです。 RedisはまだI/Oバウンドです。 redisに大きな負荷がかかり、1秒あたりの最大リクエスト数に達すると、通常、ネットワーク帯域幅またはメモリ帯域幅が不足し、CPUの多くを使用していません。これが当てはまらない特定のコマンドがありますが、ほとんどのユースケースでは、redisはネットワークまたはメモリによって厳しくI/Oバウンドされます。
メモリとネットワークの速度が突然桁違いに速くならない限り、シングルスレッドであることは通常問題ではありません。 1つまたはいくつかのスレッドを超えてスケーリングする必要がある場合(つまり、マスター<->スレーブ<->スレーブのセットアップ)、すでにRedisクラスターを検討しています。その場合、何らかの理由でCPUが不足していて、スレッド数を最大化したい場合は、CPUコアごとにクラスターインスタンスを設定できます。
私はredisのソースや内部にあまり詳しくありませんが、単一のスレッドを使用すると、ロックレスのアトミックアクションを簡単に実装できることがわかります。スレッドはこれをより複雑にし、redisはCPUにバインドされていないため、大きな利点を提供するようには見えません。 redisインスタンスより上のレベルで同時実行を実装することは良い解決策のように思われ、RedisSentinelとRedisClusterが役立ちます。
redisに時間がかかると、他のリクエストはどうなりますか?
これらの他のリクエストは、redisが長いリクエストを完了する間ブロックされます。必要に応じて、client-pause
を使用してこれをテストできます コマンド。