почему memcached? - PullRequest
       5

почему memcached?

6 голосов
/ 05 февраля 2011

Я пытаюсь понять, что нужно для решения проблемы вроде memcached. Это может показаться глупым вопросом - но что это принесет в таблицу, если все, что мне нужно, это кэшировать объекты, а не сделать простой хэш-файл?

Ответы [ 5 ]

3 голосов
/ 05 февраля 2011

Цитирование с веб-сайта memcache , memcache - это ...

Бесплатная и открытая высокопроизводительная система кэширования объектов с распределенной памятью, универсальная по своей природе, но предназначенная дляиспользовать для ускорения динамических веб-приложений за счет снижения нагрузки на базу данных.

Memcached - это хранилище ключей-значений в памяти для небольших фрагментов произвольных данных (строк, объектов) из результатов вызовов базы данных, вызовов API или страницы.рендеринг.Memcached прост, но мощен.Его простая конструкция обеспечивает быстрое развертывание, простоту разработки и решает многие проблемы, связанные с большими кэшами данных.Его API доступен для большинства популярных языков.

В глубине души это простое хранилище ключей / значений

Ключевым словом здесь является распределено .В общем, снова цитируя сайт memcache,

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

Я настоятельно рекомендую прочитать подробное описание memcache .

2 голосов
/ 07 декабря 2011

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

Если вы храните значения в HashMap, и этот HashMap привязан к контексту приложения, он будет увеличиваться в размере, если у вас не истечет срок действия элементов каким-либо образом.Memcached истекает объект лениво для максимальной производительности.

Когда элемент добавляется в memcache, он может иметь время истечения, например, 600 секунд.После истечения срока действия объекта он просто останется там, но если другой объект запросит его, он очистит его и вернет ноль.

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

2 голосов
/ 05 февраля 2011

Куда вы собираетесь поместить эту хэш-карту?Это то, что он делает для тебя.Любая структура, которую вы реализуете на PHP, существует только до завершения запроса.Если вы выбрасываете данные в постоянный кеш, вы можете получить их обратно для других запросов, вместо того, чтобы восстанавливать данные.

1 голос
/ 05 февраля 2011

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

0 голосов
/ 08 февраля 2016

Существует (старая) статья, которая сравнивает различные системы кэширования, используемые php: https://www.percona.com/blog/2006/08/09/cache-performance-comparison/

По сути, кеширование файлов происходит быстрее, чем memcached.

Поэтому, чтобы ответить на этот вопрос, я полагаю, что при использовании файловой системы кеширования производительность будет выше.

Вот результаты тестов статьи:

Cache Type                              Cache Gets/sec
Array Cache                             365000
APC Cache                               98000
File Cache                              27000
Memcached Cache (TCP/IP)                12200
MySQL Query Cache (TCP/IP)              9900
MySQL Query Cache (Unix Socket)         13500
Selecting from table (TCP/IP)           5100
Selecting from table (Unix Socket)      7400 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...