web-dev-qa-db-ja.com

RedisとMemcache

私はMemcacheとRedisに少し慣れていないので、2つの違いとそれぞれが実際に何であるかを理解しようとしています。

私に説明したように、Memcacheはデータベースキャッシングソリューションです。頻繁に実行されるクエリのデータはキャッシュされ、後で再利用されるため、応答時間が短縮されます。それは正確な説明ですか?

Redisはどうですか?それは同じように機能しますか?言い換えれば、バックエンドデータベースから受信したデータをキャッシュしますか? Redisはキーバリューストアソリューションであり、データベースサーバーとdbキャッシングソリューションの代替のように思えます。

それぞれが何であるか、そして違いが何であるかを理解する助けがあれば大歓迎です。

ありがとうブラッド

7
Brad

2つの間に実際に1つの重要な違いがあります。

  • Redis =キー/値のキャッシュ
  • Memcached =オブジェクトキャッシング

どちらも操作して、投げたいものをキャッシュすることができます。これらのシステムのいずれかおよびそれらのような他の多くのシステムの最終的な目標は、アクセスが必要なデータをより高速に格納するための分散インメモリキャッシュを提供することです。これにより、基本的にデータベースが永続的で長期的なストレージ用の単純なデータリポジトリに委ねられ、メモリ内キャッシュメカニズムが可能な限り多くのデータをオフロードしてスタックのフロントエンドに移動するため、取得の待ち時間と時間が短縮されます。データ。

ご指摘のとおり、Redisは実際にはキーと値のキャッシュのみを目的としていますが、以前にオブジェクト全体が保存されているのを見てきました。ただし、データベースのパフォーマンスの向上には役立ちます。

Memcachedは、必要なものをほぼすべて保存できるという点で、もう少し柔軟性があります。また、分散メモリキャッシュアプ​​リケーションのトップ候補の1つでもあります。これを行う他のシステムもあります。

いずれにせよ、これら2つのキャッシュのいずれかをロードするには、ソフトウェアを作成する必要があります。一部の既存のソフトウェアは、テーブルをメモリにロードするなど、考えている目的のために存在する場合がありますが、それらはそれぞれの場合に固有です。

2
Brent Pabst

Memcachedは、メモリ内のキー/値ストアです。 Redisはそのように使用できますが、それだけではありません。

MemcachedとRedisの類似点

どちらも、データベースの結果やその他のキャッシュしたいものをキャッシュすることができます。

どちらも、キーの単純な文字列値を格納できます。以前の回答では、memcachedの方が柔軟性が高いと述べていましたが、これは誤りです。 「必要なもの」をmemcachedに保存するには、オブジェクトを取得し、それらを文字列にシリアル化/マーシャリングする必要があります。 Redisはこれを同様にうまくサポートします。デフォルトの最大値のサイズがはるかに大きいため(1MB対512MB)、Redisは通常、シリアル化されたオブジェクトを格納する場合でもより柔軟です。

どちらも値をメモリに保存し、非常に高速で効率的であり、CPUを大量に使用することなく、ネットワーク帯域幅またはメモリI/Oでボトルネックになることがよくあります。どちらも非常にスケーラブルです。管理と監視のための優れたツールが両方に存在します。商用クラスターソリューションは両方に存在します。 3.0以降、redisには組み込みのクラスタリングサポートが含まれていますが、memcachedでは提供されていません。

Memcachedのほぼすべてのユースケースは、redisを使用することで、同じようにうまく解決できます。 Memcachedは素晴らしいソフトウェアですが、その機能と長所の両方がRedisのサブセットになっています。

Redisスーパーセット

それらが異なるのは、redisが提供する多数の追加機能と、それらの機能が可能にする追加のユースケースです。

Redisは単なるキー/バリューストアではありません。これは、メモリ内のデータ構造サーバーです。キーには、memcachedのように単純な文字列を割り当てることができますが、ハッシュ、リスト、セット、または並べ替えられたセットを格納することもできます。これらの追加のデータ型は効率的で最適化されており、 それらを活用するための多くのコマンド であり、単純なキー/値ストアでは提供されないアクセスパターンを有効にします。

Redisは 永続性 、組み込みおよびデフォルトでオンを提供します。これは、redisがデフォルトで実際のデータベースであり、memcachedのような単純な揮発性キャッシュではないことを意味します。再起動すると、データがそこに表示されます。永続性を微調整してユースケースを最適に解決するために使用できる簡単な管理オプションがたくさんあります。または、揮発性キャッシュだけが必要な場合はオフにします。

Redisは pub/sub (パブリッシュ/サブスクライブ)を提供します。これにより、チャネルを作成し、1つ以上のクライアントにそれらをサブスクライブさせることができ、効率的な高速リアルタイム通信メカニズムが可能になります。これは、プロセス間、アプリケーション間、またはサーバー間通信に最適なソリューションです。

Redisは Luaスクリプトサポート を提供しています。これにより、あらゆる種類の新しいことが可能になります。重要な例の1つは、複数の依存するredisコマンドをアトミ​​ックに実行し、redisを1回呼び出すことです。 Luaスクリプトは簡単に理解でき、スクリプトは効率的かつアトミックに実行されます。

結論

プロジェクトですでにmemcachedを使用している場合、または組織がmemcachedに多額の投資を行っている場合を除き、これを使用しないでください。 Redisは、独自のゲームでmemcachedに匹敵し、新しいゲームの全世界を可能にします。両方のツールで問題を同等に解決できる場合でも、まだ予測できない問題に対してより柔軟性を提供するツール、redisを使用してください。また、より積極的に開発および保守され、より迅速に改善されているツールを選択することになります。 Memcachedはどこにも行きませんし、そうすべきではありませんが、memcachedにかなりの知識やインフラストラクチャへの投資がない限り、新しいもので使用されていると主張するのは困難です。

すでにmemcachedを使用している場合、redisへの切り替えは、ほとんどまたはまったく利益がないため、多くの作業になる可能性があります。 redisを綿密に評価し、状況に応じて、切り替えのコストがメリットを上回っているかどうかを判断します。含まれている場合は、memcachedを使用してください。それは今でも素晴らしい、安定した、強化されたソフトウェアです。

11
Carl Zulauf