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

キャッシングアプリケーションでのRedisとDiskのパフォーマンス

    これはリンゴとオレンジの比較です。http://redis.io/topics/benchmarks

    を参照してください。

    Redisは効率的なリモートです データストア。コマンドがRedisで実行されるたびに、メッセージがRedisサーバーに送信され、クライアントが同期している場合は、応答の待機がブロックされます。したがって、コマンド自体のコストを超えて、ネットワークラウンドトリップまたはIPCの料金を支払うことになります。

    最新のハードウェアでは、ネットワークラウンドトリップまたはIPCは、他の操作と比較して驚くほど高価です。これはいくつかの要因によるものです:

    • メディアの生の遅延(主にネットワーク用)
    • オペレーティングシステムスケジューラのレイテンシ(Linux / Unixでは保証されません)
    • メモリキャッシュミスはコストがかかり、クライアントプロセスとサーバープロセスのイン/アウトがスケジュールされている間、キャッシュミスの可能性が高くなります。
    • ハイエンドボックスでは、NUMAの副作用

    それでは、結果を確認しましょう。

    ジェネレーターを使用した実装と関数呼び出しを使用した実装を比較すると、Redisへのラウンドトリップ数は同じではありません。ジェネレータを使用すると、次のようになります。

        while time.time() - t - expiry < 0:
            yield r.get(fpKey)
    

    したがって、反復ごとに1ラウンドトリップします。この関数を使用すると、次のことができます。

    if r.exists(fpKey):
        return r.get(fpKey)
    

    したがって、反復ごとに2ラウンドトリップします。ジェネレーターの方が速いのも不思議ではありません。

    もちろん、最適なパフォーマンスを得るために、同じRedis接続を再利用することになっています。体系的に接続/切断するベンチマークを実行する意味はありません。

    最後に、Redis呼び出しとファイル読み取りのパフォーマンスの違いについては、ローカル呼び出しとリモート呼び出しを比較しているだけです。ファイル読み取りはOSファイルシステムによってキャッシュされるため、カーネルとPython間の高速メモリ転送操作です。ここにはディスクI/Oは含まれていません。 Redisを使用すると、往復の費用を支払う必要があるため、はるかに遅くなります。




    1. NoSqlデータベース(MongoDB)で外部キーを適用するにはどうすればよいですか?

    2. マングースは常に空の配列NodeJSを返します

    3. マングーススキーマの配列にデータを追加する方法

    4. NodeJS + ExpressJS+RedisStoreセッションは未定義です