Redisキャッシュとメモリを直接使用する


141

私はまだRedisを使用していませんが、聞いたことがあり、キャッシュの保存として試してみるつもりです。

Redisがメモリをキャッシュストアデータベースとして使用していると聞いたので、変数をオブジェクトまたはディクショナリデータ型として使用してデータを格納する場合の違いは何ですか?お気に入り:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Redisの利点は何ですか?

回答:


221

Redisはリモートデータ構造サーバーです。データをローカルメモリに格納するよりも確かに遅くなります(データをフェッチ/格納するためにソケットの往復が含まれるため)。ただし、いくつかの興味深いプロパティもあります。

  • Redisはアプリケーションのすべてのプロセスからアクセスでき、複数のノードで実行されている可能性があります(ローカルメモリでは実現できないもの)。

  • Redisのメモリストレージは非常に効率的で、別のプロセスで実行されます。メモリがガベージコレクションされたプラットフォーム(node.js、javaなど)でアプリケーションを実行すると、はるかに大きなメモリキャッシュ/ストアを処理できます。実際には、非常に大きなヒープは、ガベージコレクションされた言語ではうまく機能しません。

  • Redisは、必要に応じてデータをディスクに保持できます。

  • Redisは単純なキャッシュではなく、さまざまなデータ構造、さまざまなアイテムの削除ポリシー、ブロッキングキュー、pub / sub、原子性、Luaスクリプトなどを提供します...

  • Redisは、高可用性を実装するために、マスター/スレーブメカニズムでアクティビティを複製できます。

基本的に、同じデータを共有する複数のノードでアプリケーションをスケーリングする必要がある場合は、Redis(または他のリモートキー/値ストア)のようなものが必要になります。


5
最後のポイントは特に、Rliteのようなものは少し無意味であるように見えます-辞書ストアは、単一のプロセスを持っているほとんどのユースケースと同じように適しています。そうですか?
naught101

1
はい。IMO Rliteの関心はかなり限られています。
Didier Spezia、

これらのヒントに感謝します。したがって、Redisはスケーリングに最適ですが、メモリ内に取得するオブジェクトが平均300〜500個の単純なチャットアプリの場合、メモリ内のデータ構造は、これより速くなくてもうまく機能します少しですか?
Webwoman

2
@DidierSpezia very large heaps do not perform well with garbage collected languages、その理由を説明できますか?
roottraveller

1
@roottraveller、これはガベージコレクションプロセスがヒープメモリを解放するために一般にアプリケーションの実行を中断する必要があるため( "stop-the-world")、ヒープが大きいほど、この中断が通常長く続くためです。
Regorsmitz

3

現在、各リクエストが別のコンテナーに移動できるサーバーレスアーキテクチャーがより魅力的です。この場合、redisは非常に重要な役割を果たすことができます。

シンプルキャッシュが格納されているのと同じコンテナでリクエストが処理されることを確認できないため、サーバーレスでシンプルキャッシュを使用することはできません。

この場合、リモートロケーションにキャッシュを保存するため、redisを使用する必要があります。サーバーレスアーキテクチャではコンテナーの変更にもアクセスできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.