memcachedはRedisと比較して恐竜ですか?[閉まっている]


185

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

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

これは素晴らしいですね。ベンチマーク付きのこのページも見つけました:http : //www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

つまり、正直に言って-memcacheは、Redisと呼ばれるこの新参者と比較した場合、パフォーマンスの観点からは悪い選択である古い恐竜ですか?

以前はRedisについて多くのことを聞いたことがなかったので、私の質問に対するアプローチは!



9
このruturajベンチマークはあまり注目に値しません
dsomnus 2010

2
私たちは職場でMembaseを使った実験を始めており、これまでのところ満足しています。しかし、私たちはMemcacheから来ているので、置き換えの数を減らすこと
jayshao

2
Redisはmemcachedと同じくらい高速で、非現実的な不自然なベンチマークに対応しています。それが遅いことを示唆しているわけではありません-それは確かにほとんどのワークロードに対して十分に速いですが、memcachedより速いものはmemcachedのバグを明らかにするだけです。ほとんどの場合、ハードウェアまたは貧弱なアプリケーション設計によってボトルネックになっています。
ダスティン

4
SO巡回の神聖さがこの質問を不適切で役に立たないものとして閉じていなかったことに驚いています。
Dogweather

回答:


74

Memcacheは優れたツールであり、非常に信頼性が高いです。

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

  • ローカルRAMのみを使用していますか?->最速
  • リモートRAMを使用していますか?->速い
  • ram plus hardddiskを使用していますか?
  • ハードディスクのみを使用しますか->実行しますか?

3
私が知っているmemcacheでレプリケーションを処理する機能はありません。Memcacheは純粋にキャッシュであることを意図しています。アイテムがパージ/失われた場合は、再構築する必要があります。私はこれを以前に使用したことも評価したこともありませんが、これはあなたにとって興味深いかもしれません。 code.google.com/p/memagent
Daniel

1
Membaseはmemcachedプロトコルをサポートしていますが、永続性とレプリケーションもサポートしています。
ジムフェラン

1
最近、4つのポートにわたって結合されたイーサネットを見ました。4 x 44MB /秒。これにより、結合されたイーサネットを使用できると想定して、RAMの価値がさらに高まります。
ダニエル

1
将来の参考のために、Facebookは最近オープンソース化されたmcrouterであり、これによりmemcachedに複製が追加されます。他のものはまた(Redisのは、今、超高速などである)日付されていますが、5年後にここにしているFYI場合...
dannysauer

ポイントは何ですか?両方の簡単なJSONアレイdireclty、ウェブ上で最も広く使用されているデータ交換フォーマットを保存カント、私は彼らが考えた何見当がつかない...オハイオ州私が原因でネイティブに誰心配の世界の権利でJSONについてReJSONを追加する必要があります多分待ちます
PirateApp

205

あなたが必要とするものに依存しますが、一般的に私はそう思います:

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

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

もちろん、私はRedisプロジェクトのリード開発者なので、偏見があるかもしれません。


67
終了時の優れた開示のための+1
NateDSaint

6
これが言語の間違いかどうかはわかりませんが、「一般的にはパフォーマンスについてあまり気にしないほうがいいと思う」とあなたが主張するなら、それは深刻な懸念の原因です。Redisは特定の種類の問題に非常に適している場合がありますが、従来、memcacheは永続的なデータベースのパフォーマンスの問題を解決するために特に使用されてきました。また、リストからの目立った省略は、製品の成熟度だと思います。Memcacheは、約10年の経験を持つ成熟した製品です。Redisは有望ですが、3年ほどしか使用されていません。
DougW 2012

1
@DougWあなたはこのフレーズを文脈から外しています。「ここでのポイントは次のとおりです:どちらか一方が提供できる1秒あたりのクエリ数のボトルネックになる可能性は
ほとんどありません

83

つまり、正直に言って-memcacheは、Redisと呼ばれるこの新参者と比較した場合、パフォーマンスの観点からは悪い選択である古い恐竜ですか?

  • 機能セットを比較すると、機能Redisが大幅に増えます。
  • インストールの容易さを比較することRedisもはるかに簡単です。依存関係は必要ありません。
  • アクティブな開発を比較することRedisも良いです。
  • memcachedは少し速いと信じていますRedis。ディスクにはまったく触れません。
  • 私の意見では、それRedisよりも優れた製品ですmemcached

31
redisは、指示された場合にのみディスクに触れます。通常、1秒おきにfsyncを実行します->気づかないでしょう
Marc Seeger

1
@マルクうん。私はあなたがそれをディスクに全く触れないようにそれを言うことができると私は信じます、しかし私はそれが常に今すぐにfsyncすることを信じますか?
アルフレッド

3
また、私の経験では、RedisはMemcachedよりも少し高速です(メモリのみのモードでRedisを使用する場合)。Antirezはここでテストを行いましたantirez.com/post/redis-memcached-benchmark.html
Sune Rievers

10
大きな違い:Memcachedはマルチスレッドであり、Redisはそうではありません。したがって、単一のリクエストのレイテンシは同等ですが、同時実行性が高い場合、Memcachedはより多くのリクエストを処理できます。一方、Redisは1つのCPUコア/スレッドしか使用しないため、同時リクエストがわずかで、パフォーマンスのピークに達します。これを回避するための推奨される方法は、一貫したハッシュを使用して1台のマシンでRedisの複数のインスタンスを実行することですが、これは本当に貧弱なソリューションです。したがって、高い同時実行性が必要で、マルチコアCPU(そうでない場合)がある場合、Memcachedははるかに高速です。
ColinM 2012年

2
@ Alfred、Redisがシングルスレッドであることは隠された事実ではなく、それは作者による設計上の決定(堅牢性よりも単純さ)です。上記にリンクしているダスティンの記事は、それが実際に影響を与えているという確かな証拠です。また、私はRedisをZend_Cacheバックエンドとして使用している自分のベンチマークでこれを確認しました。同時実行性が増加するにつれて、Redisはmemcachedに比べてかなり早くプラトーになります。
ColinM 2012

46

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

これが主な違いです(キャッシュとして使用するだけの場合)。



13

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の追加のデータ操作機能を利用できる度合いによって異なります。


こんにちはディーン、あなたの投稿をありがとう。ぜひチェックしてみます。PHPでMembaseを使用できますか?
産業

4
Membaseはmemcachedプロトコルを使用しているため、任意のmemcachedクライアントが機能するはずです。wiki.membase.org
bin

MembaseはTTLをサポートしています。すべてのMemcache実装は、有効期限付きのプットをサポートしています。 github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav

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