Когда я должен использовать Memcache вместо Memcached?

310

Похоже, PHP имеет две библиотеки memcached с именем memcache и memcached. В чем разница и как вы знаете, какой из них использовать? Один из них устарел? Кажется, что memcached предлагает больше методов, поэтому я бы предположил, что это означает, что у него было наибольшее развитие, - но он также требует внешних библиотек C/С++ поэтому я не уверен, смогу ли я установить его.

Кажется, что memcache был дольше, не требует дополнительных библиотек и предварительно скомпилированные двоичные файлы для четных окон! Я бы подумал, что сейчас это будет лучший выбор. Однако, будучи новым для memcached (server), я не уверен, есть ли в memcached (php) некоторые супер важные функции, которые делают его более сложным.

Теги:
memcached

4 ответа

254
Лучший ответ

Библиотека Memcached client была недавно выпущена как стабильная. Он используется digg (разработан для digg Андрея Змиевского, теперь уже не с digg) и реализует гораздо больше memcached протокол, чем предыдущий клиент memcache. Наиболее важные функции, которые были memcached:

  • Кассовые символы. Это облегчило мою жизнь и является легкой профилактической системой для устаревших данных. Всякий раз, когда вы извлекаете что-то из кеша, вы можете получить с ним токен (двойной номер). Вы можете использовать этот токен для сохранения обновленного объекта. Если никто еще не обновил значение во время работы потока, обмен будет успешным. В противном случае был создан новый токен, и вы вынуждены перезагрузить данные и снова сохранить их с новым токеном.
  • Прочитайте callbacks - лучшая вещь, поскольку нарезанный хлеб. Это упростило мою часть кода.
  • getDelayed() - приятная функция, которая может сократить время, в течение которого ваш script должен ждать, пока результаты вернутся с сервера.
  • Хотя сервер memcached должен быть очень стабильным, он не самый быстрый. Вы можете использовать двоичный протокол вместо ASCII с более новым клиентом.
  • Всякий раз, когда вы сохраняете сложные данные в memcached, клиент всегда делает сериализацию значения (которое медленное), но теперь с memcached-клиентом у вас есть возможность использовать igbinary. До сих пор у меня не было возможности проверить, насколько сильно это может быть достигнуто.

Все эти моменты были достаточными для того, чтобы я переключился на нового клиента и могу сказать, что он работает как шарм. Существует внешняя зависимость от библиотеки libmemcached, но ей удалось установить ее, тем не менее, на Ubuntu и Mac OSX, поэтому проблем до сих пор нет.

Если вы решите обновиться до новой библиотеки, я предлагаю вам обновить последнюю версию сервера, а также иметь некоторые интересные функции. Вам нужно будет установить libevent для его компиляции, но на Ubuntu это было не так много.

Я не видел, чтобы какие-либо фреймворки забирали новый memcached-клиент до сих пор (хотя я их не отслеживаю), но я предполагаю Zend скоро появится на борту.

UPDATE

Zend Framework 2 имеет адаптер для Memcached, который можно найти здесь

  • 1
    Отличный ответ; Кроме того, внешняя зависимость от libmemcached на самом деле является плюсом, в данном случае, так как это один из наиболее активно развивающихся клиентов.
  • 0
    Согласовано. Внешняя зависимость libmemcached не должна рассматриваться как проблема, как и libevent.
Показать ещё 7 комментариев
11

Это 2013. Забудьте о комментариях за 2009 год. Аналогично, если вы выполняете серьезные нагрузки на трафик, не задумывайтесь о том, как сделать это с помощью memcache на базе Windows. При работе с очень крупным масштабом (более 500 серверов веб-интерфейса) и 20+ серверов и репликантов back-end (mysql и mssql mix) ферма серверов memcached (12 серверов в группе) поддерживает несколько высокопроизводительных OLTP-приложений, отвечающих требованиям 25K ~ 40K mc- > получать звонки в секунду. Этими вызовами являются те, которым НЕ приходится обращаться к базе данных.

IMHO, это использование memcached предоставило SERIOUS $$$, $$$ экономию на CAPEX для новых серверов и лицензий БД, а также контракты на поддержку крупных коммерческих проектов.

  • 44
    Как это отвечает на вопрос о различиях между этими двумя реализациями протокола memcache в php?
  • 9
    Это должен быть комментарий.
10

При использовании Windows сравнение сокращается: memcache оказывается единственным доступным клиентом.

  • 0
    Не могли бы вы всегда добавить расширение memcached в себя?
  • 0
    Не похоже, что это действительно так. commaster.net/content/installing-memcached-windows
7

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

После того, как версия по-прежнему очень низкая 0.2, но я использовал оба варианта, и я не столкнулся с серьезной проблемой, поэтому я пошел бы в memcached, так как это было новым.

  • 1
    Оба фактически работают как обработчики сеансов, хотя я бы никогда не хотел использовать их для этого. us3.php.net/manual/en/memcache.examples-overview.php
  • 0
    хорошо поймай мое плохо, да, это действительно очень полезно на большом сервере, когда становится очень важным, плюс memcache не проверяет, что он не уронит какой-то объект, чтобы получить память, настолько сложную для понимания, как масштабировать вещи.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню