Memcache vs Java Memory
Простой, возможно, немой вопрос: предположим, что у меня есть сервер Java, который хранит в памяти обычно используемые ключи и значения, которые я могу запросить (скажем, в HashMap)
Какая разница между этим и использованием Memcache (или даже Redis)? Они оба хранят вещи в памяти. Есть ли преимущество для одного или другого? Остается ли Memcache меньше памяти? Можно ли хранить больше за меньшую память? Быстрее запросить? Разница?
Ответы
Ответ 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.