この質問に対する簡単な答えはありません。すべてのNoSQLまたはSQLベースのストレージソリューションには、ストレージエンジンの待ち時間が長くなったり遅くなったりする可能性のある条件がたくさんあります。Redisも例外ではありません。
私は読むことから始めることをお勧めします:
考えられる理由の完全ではないリストを次に示します。
- 不十分なハードウェア(ネットワーク、メモリ、CPU)
- ソフトウェアベースの仮想化(たとえば、ローエンドハードウェア上のXen)
- メモリが不足しているため、OSレベルでスワッピングが発生します
- シングルスレッドエンジンで実行されたO(n)操作(KEYSなど)が多すぎます
- 大きなオブジェクトがRedisに保存され、通信バッファーの制御されない拡張につながる
- 膨大な数の同時セッション(> 30000)
- 1秒あたりの接続操作が多すぎます(RedisはWebサーバーではなく、接続は一時的ではなく永続的であると想定されています)。
- クライアントアプリケーションによって生成されたラウンドトリップが多すぎます(パイプライン化または集約されたコマンドの使用なし)
- bgsaveまたはAOFリライトによって生成されたラージフォーク操作(特にVMで)
- AOFを使用した場合のI/O関連のレイテンシ
- 同時にトリガーされた多くの期限切れ操作の蓄積
- クライアントおよびマスター/スレーブ通信バッファーのメモリーの蓄積、または遅いログデータ
- ネットワーク帯域幅の消費が大きい場合のTCPインキャスト条件
- 分散ストレージ(特にEC2 EBSなどの曇ったストレージ)を使用してダンプまたはAOFファイルを保存する
独自のアプリケーションによって生成されるワークロードに関連して、おそらく他にも多くの理由があります。
他の一般的な理由について考える人がいる場合は、このリストに追加できます。