sql >> データベース >  >> NoSQL >> Redis

RedisでのSCANとKEYSのパフォーマンス

    Redisは単一のスレッドを使用してコマンドを処理するため、現在のコマンドの実行ではなく、他のすべてのコマンドへの影響を気にする必要があります(つまり、コマンドの実行中、他のすべてのコマンドは実行が終了するまで待つ必要があります)。

    keysの間 またはscan あなたのケースで単独で実行された同様または同一のパフォーマンスを提供する可能性があります。Redisをブロックする数ミリ秒は、全体的なI/Oを大幅に減少させます。

    これがkeysを使用する主な理由です 開発目的およびscan 実稼働環境で。

    OPのコメント:

    「キーまたはスキャンを使用すると、同じまたは同一のパフォーマンスが単独で実行される場合がありますが、Redisを数ミリ秒ブロックすると、全体的なI/Oが大幅に減少します。」 -この文は、一方のコマンドがRedisをブロックし、もう一方のコマンドがブロックしないことを示しているようですが、そうではありません。 KEYSへの呼び出しから100の結果が保証されている場合、SCANよりも悪いのは何ですか? 1つのコマンドがブロックされやすいと思うのはなぜですか?

    検索をページ分割できる場合は、かなりの違いがあるはずです。 1回のパスで100個のキーを取得するように強制されるのと、ページネーションを実装して10 x 10(または50と50)の100個のキーを取得できるのと同じではありません。 この非常に小さな中断により、アプリケーション層から送信された他のコマンドをRedisで処理できるようになります 。これについてRedisの公式ドキュメントに記載されている内容をご覧ください:

    これらのコマンドは増分反復を可能にし、呼び出しごとに少数の要素のみを返すため、キーの大きなコレクションに対して呼び出されたときにサーバーを長時間(数秒でも)ブロックする可能性のあるKEYSやSMEMBERSなどのコマンドの欠点なしに本番環境で使用できますまたは要素



    1. MongoDB insertOne()

    2. rails + docker + sidekiq + 127.0.0.1:6379でのRedisへの接続エラー(Errno ::ECONNREFUSED)

    3. マングース(Nodejs)の複数化ルールとは何ですか?

    4. mongodbのネストされた配列を更新しています