web-dev-qa-db-ja.com

memcachedはRedisと比較して恐竜ですか?

私は先週、memcachedでかなりの作業をし、Redisについて知りました。彼らのreadmeのこの部分を読んだとき、私は突然私の胃の中に温かく居心地の良い感覚を得ました:

Redisは、ステロイドのmemcachedとして使用できます。これは、memcachedと同じくらい高速ですが、さらに多くの機能を備えているためです。 memcachedと同様に、Redisはキーにタイムアウトを設定することもサポートしているため、一定の時間が経過するとこのキーは自動的に削除されます。

これはすごいですね。このページにはベンチマークもありました: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

それで、正直なところ-memcacheは、Redisと呼ばれるこの新人と比較して、パフォーマンスの観点から悪い選択である本当に古い恐竜ですか?

私は以前Redisについてあまり聞いたことがないので、私の質問に対するアプローチです!

180
Industrial

Memcacheは依然として優れたツールであり、非常に信頼性があります。

100ミリ秒未満の範囲で誰が速いかという観点からこの問題を見る代わりに、ソフトウェアの「クラス」ごとのパフォーマンスを見てください。

  • ローカルRAMのみを使用しますか? ->最速
  • リモートラムを使用しますか? ->高速
  • Ramとhardddiskを使用しますか?.
  • ハードディスクのみを使用する->実行する!
73
Daniel

必要なものに依存しますが、一般的には次のように思います:

  • パフォーマンスについてあまり気にしないでください。 Redisは値が小さいとコアごとに高速になりますが、memcachedは単一の実行可能ファイルとTCPポートを持つ複数のコアをクライアントの助けなしで使用できます。また、memcachedは、100kのオーダーの大きな値で高速です。 Redisは最近、大きな値(不安定なブランチ)について大幅に改善しましたが、このユースケースではmemcachedの方が高速です。ここでのポイントは次のとおりです。また、1秒あたりのクエリの配信のボトルネックになる可能性はありません。
  • メモリ使用量に注意する必要があります。単純なキーと値のペアの場合、memcachedの方がメモリ効率が高くなります。 Redisハッシュを使用すると、Redisのメモリ効率が向上します。ユースケースに依存します。
  • 永続性とレプリケーションに注意する必要があります。2つの機能はRedisでのみ利用可能です。キャッシュを構築することが目的であっても、アップグレードまたは再起動後もデータが残っていることが役立ちます。
  • 必要な操作の種類に注意する必要があります。 Redisには多くの複雑な操作があり、キャッシングのユースケースを考慮しても、多くの場合、クライアント側でデータを処理する必要なく、1回の操作でより多くの操作を実行できます(多くのI/Oが必要になる場合があります)。多くの場合、この操作は単純なGETおよびSETと同じくらい高速です。 GET/SETだけでなく、より複雑なものが必要な場合は、Redisが大いに役立ちます(タイムラインキャッシュで考えてください)。

ユースケースなしで今すぐに選ぶのは難しいですが、DBとして使用したくない場合でも、Redisが理にかなっている多くのことについて、より多くの問題を解決できるので、キャッシュだけでなく、メッセージング、ランキングなども含まれます。

追伸もちろん、私はRedisプロジェクトの主任開発者なので、偏見を抱く可能性があります。

200
antirez

それで、正直なところ-memcacheは、Redisと呼ばれるこの新人と比較して、パフォーマンスの観点から悪い選択である本当に古い恐竜ですか?

  • 設定された機能を比較すると、Redisにはさらに多くの機能があります。
  • インストールの容易さの比較Redisも非常に簡単です。依存関係は必要ありません。
  • アクティブな開発の比較Redisも優れています。
  • memcachedRedisよりも少し速いと思います。ディスクにはまったく触れません。
  • 私の意見では、Redismemcachedよりも優れた製品です。
81
Alfred

Redisが行わないmemcachedが行うことは、キャッシュからの値の最も最近使用されないエビクションです。 memcachedを使用すると、必要な数だけ安全に設定でき、メモリがオーバーフローすると、最近使用していない値が削除されます。 Redisでは、すべてにタイムアウトを設定することによってのみこれを概算できます。メモリを解放する必要がある場合、3つのランダムキーを調べて、期限切れに最も近いキーを削除します。

キャッシュとして使用している場合、それが主な違いです。

46
Peter Scott

Membaseをご覧になることもできます。

http://www.northscale.com/products/membase_server.html

使用していませんが、永続性を備えたメモリ中心のKVストアであるという点でRedisに似ているようです。私が見ることができるものとの主な違いは次のとおりです。

  • Redisには、より多くのデータ操作機能があります(順序付きセットなど)。
  • Redisには、水平スケーラビリティを追加するための保留中のRedis Clusterプロジェクトがあります
  • Redisには、LRUとオブジェクトのサイズの両方を考慮するハイブリッドアルゴリズムに基づいて、ディスクへのデータオフロード(VM)の単一層があります。

  • Membaseはmemcachedワイヤプロトコルを使用します-既存のアプリケーションのアップグレードパスとして役立ちます

  • Membaseは、分散ハッシュテーブルアプローチを使用して水平方向にスケーリングするように設定されています
  • MembaseはLRUアプローチを使用して複数層のデータオフロードをサポートできます(使用されることはほとんどなく、ディスクに行くことはほとんどなく、SSDに行くことはめったになく、頻繁にRAMに残っています)
  • MembaseのTTL機能についてはわかりません。

選択は、アプリケーションがRedisの追加のデータ操作機能をどの程度活用できるかによって異なります。

12
HikeOnPast

Hazelcastはmemcachedプロトコルをネイティブにサポートします

https://web.archive.org/web/20140601010929/http://hazelcast.org/docs/latest/manual/html-single/hazelcast-documentation.html

したがって、memcachedの最新の代替手段です。すべてのソリューションを試して、最適なものを確認してください。

0
Miko Matsumura