単純な、おそらく馬鹿げた質問:私がJavaを使用して、クエリに使用できる一般的に使用されるキーと値をメモリに格納するサーバーがあるとします(HashMapで言うとしましょう)
それとMemcache(またはRedis)を使用することの違いは何ですか?どちらも物事をメモリに保存します。どちらか一方にメリットはありますか? Memcacheのメモリフットプリントは少なくなりますか?より少ないメモリでより多くを保存できますか?クエリが高速ですか?変わりはない?
Javaメモリの利点:
Javaメモリ:memcacheの利点:
並行ハッシュマップ、memcached、MySQLのベンチマークを作成しました。
結果は次のとおりです。
タイプ挿入ルックアップ削除
ConcurrentHashMap 264ms 93ms 82ms
Memcached 6549ms 5976ms 4900ms
Mysql 55754ms 26002ms 57899ms
このベンチマークにはスレッドプールが使用されました。
いくつかの詳細情報はここにあります: http://www.incentergy.de/2013/12/big-data-architecture-patterns-for-performance/
さらに、次のキャッシュはmemcachedの代わりになる可能性があります: https://code.google.com/p/kitty-cache/
それはあなたが何を望んでいるかに依存します。インメモリマップはより高速になります。データの期限切れは実際には問題ではありません(参照:Google Guavaの MapMaker 。これにより、読み取りや書き込みの後にエントリを期限切れにするマップを作成できます。 OSCache のようなことを忘れないでください=および EHCacheGigaSpaces XAP または Coherence )などの分散されたものは言うまでもありません。
キャッシュプロジェクト(XAP、OSCache、EhCache、Coherenceなど)はキャッシュエントリを分散できるため、自然なシャーディングやその他の機能を利用できます。 Coherenceはトランザクションとライトスルーを管理でき、XAPは実際にはレコードのシステムとして機能するように設計されています(XAPへの書き込みは同期および複製されるため、実際のデータストレージメカニズムとしてではなく、メモリ内データグリッドを使用します)データベースを使用します。)
Memcachedは...一連のマシンからmemcachedサーバーインスタンスにアクセスできます。 APIとしてのMemcachedは単なるキー/値ストアであり、配布は完全にクライアント側で行われます。それは確かに基本を持っていると思います、そしてそれは間違いなく複数の言語APIを持っていますが、それ以外の場合は本当にかなりリンプです。
(ところで、GigaSpacesにはMemcachedレイヤーがあるため、理論的にはmemcachedを記録システムとして使用できます...)