Подтвердить что ты не робот

Memcache vs Java Memory

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

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

4b9b3361

Ответ 1

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

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

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

  • Доступ к нему может быть доступен более чем одним сервером приложений, поэтому ваш кеш будет использоваться для всех серверов приложений.
  • Доступ к нему может осуществляться различными серверами, если все согласны с ключевой схемой и сериализацией.
  • Отбрасывает истекшие значения кеша, поэтому вы получаете недействительность по времени.

Ответ 2

Я только что сделал сравнительный тест между параллельной картой хэша, 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/

Ответ 3

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

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

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

(BTW, GigaSpaces имеет уровень Memcached, поэтому вы можете теоретически использовать memcached как систему записи...)

Ответ 4

В принципе, если у нас есть некоторые серверы приложений, нам кажется, что мы должны использовать Memcached.