Memcache vs Java Memory - PullRequest
       56

Memcache vs Java Memory

49 голосов
/ 29 марта 2011

Простой, возможно, глупый вопрос: предположим, у меня есть Java-сервер, который хранит в памяти часто используемые ключи и значения, которые я могу запросить (скажем, в HashMap)

В чем разница между этим и использованием Memcache (или даже Redis)? Они оба хранят вещи в памяти. Есть ли польза для одного или другого? Оставляет ли Memcache меньше памяти? Может хранить больше в меньшей памяти? Быстрее запросить? Нет разницы?

Ответы [ 3 ]

49 голосов
/ 29 марта 2011

Преимущества памяти Java над memcache:

  1. Память Java быстрее (без сети).
  2. Память Java не требует сериализации, вам доступны объекты Java.

Преимущества memcache над памятью Java:

  1. Доступ к нему может быть осуществлен несколькими серверами приложений, поэтому ваш кеш будет использоваться всеми серверами приложений.
  2. К нему могут обращаться различные серверы, если они все согласны со схемой ключей и сериализацией.
  3. Он отбрасывает значения кэша с истекшим сроком действия, поэтому вы получаете аннулирование по времени.
27 голосов
/ 12 декабря 2013

Я только что установил эталон между одновременной хэш-картой, memcached и MySQL.

HashMap vs. memcached vs. 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/

16 голосов
/ 29 марта 2011

Это зависит от того, что вы хотите.Карта в памяти будет быстрее;истечение срока действия данных на самом деле не проблема (см .: Google Guava MapMaker , который может создать карту, срок действия которой истекает после чтения и / или записи, и давайте не будем забывать такие вещи, как OSCache и EHCache , не говоря уже о распределенных вещах, таких как GigaSpaces XAP или Coherence ).

Проекты кэширования (XAP, OSCache, EhCache, Coherence и т. Д.) Могут распределять записи в кэше, поэтому вы получаете естественное разделение и другие средства;Согласованность может управлять транзакциями и сквозной записью, а XAP фактически предназначен для использования в качестве системы записи (где запись в нее синхронизируется и реплицируется, так что вы используете сетку данных в памяти в качестве фактического механизма хранения данных, а неиспользуя базу данных.)

Memcached - это ... хорошо, вы можете получить доступ к экземпляру сервера memcached с нескольких машин.Memcached как API - это просто хранилище ключей / значений, а распространение полностью выполняется на стороне клиента.Я думаю, что у него, конечно, есть основы, и у него определенно есть многоязыковые API, но в действительности он довольно слабый.

(Кстати, у GigaSpaces есть слой Memcached, так что вы могли бы теоретически использоватьmemcached как система записи ...)

...