Web

Что использовать: memcache или memcached?

Я хочу использовать memcached:

http://www.danga.com/memcached/

Я установил его через yum install memcached. Но теперь мне нужно подключиться к PHP, а там есть расширение с именем memcache и еще одно с именем memcached? 

http://us3.php.net/manual/en/book.memcache.php

http://us3.php.net/manual/en/book.memcached.php

 Не мог бы кто-нибудь указать мне правильное направление... какое из них будет работать? Также нужно ли мне открыть какие-либо порты, чтобы это работало, даже если использовать локальный доступ? После запуска я пробую telnet 127.0.0.1 11211 и получаю отказ в подключении.

Ответ 1

Короткий ответ: мой первый выбор memcache (первый из перечисленных вами), исключительно на основании правильного использования номенклатуры.

Вот как я пришел к такому выводу:

Вот краткая справка по соглашениям об именовании (для тех, кто не знаком), которая объясняет непонимание задавшего вопрос: для многих *nix-приложений часть, выполняющая внутреннюю работу, называется «демон» (аналог «службы» в Windows), а интерфейс или клиентское приложение это то, что вы используете для управления демоном или доступа к нему. Чаще всего демон называется так же, как и клиент, с добавлением буквы «d». Например, «imap» — это клиент, который подключается к демону «imapd».

Это соглашение об именовании четко соблюдается в memcache, когда вы читаете введение к модулю memcache (обратите внимание на различие между memcache и memcached в этом отрывке):

Модуль Memcache предоставляет удобный процедурный и объектно-ориентированный интерфейс для memcached, высокоэффективного демона кэширования, который был специально разработан для снижения нагрузки на базу данных в динамических веб-приложениях. Модуль Memcache также предоставляет обработчик сессий (memcache). Более подробную информацию о memcached можно найти на сайте: 

http://www.danga.com/memcached/.

Неопределенность здесь вызвана тем, что автор расширения PHP неудачно назвал его memcached, поскольку оно имеет то же имя, что и реальный демон memcached. Обратите внимание, что во введении к memcached (модуль php) упоминается libmemcached, которая является разделяемой библиотекой (или API), используемой модулем для доступа к демону memcached:

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

Это расширение использует библиотеку libmemcached для предоставления API для взаимодействия с серверами memcached. Оно также предоставляет обработчик сессий (memcached). Информацию о libmemcached можно найти на сайте: 

http://tangent.org/552/libmemcached.html.

В целом, оба расширения функционально одинаковы, просто у них разные авторы, а также одно просто названо более правильно, чем другое.

Ответ 2

Вы, вероятно, хотите рассмотреть сравнение PHP-клиентов.

Краткая версия:они оба будут работать, и для большинства случаев любой из них подойдет отлично.

Что касается другого вопроса:да, вы должны быть в состоянии сделать telnet 127.0.0.1 11211. Очень немногие брандмауэры блокируют связь localhost с самим собой. Если вы не можете подключиться, проверьте, действительно ли запущен memcached, выполнив ps auxwww | grep memcached, который также покажет вам аргументы командной строки, используемые для запуска memcached. Одним из аргументов должен быть -p 11211 или другой номер порта. Значение всех возможных аргументов см. в man memcached.

Ответ 3

Как следует из ссылки в предыдущем ответе, оба варианта отлично подходят для простого использования. Однако memcached поддерживает больше функций, которые позволяют получить максимальную производительность от memcached. Бинарный протокол уменьшает количество данных, которые необходимо пересылать между клиентом и сервером. Мультинаборы и мультисеты позволяют получать/набирать несколько элементов одновременно. Если вы обнаружили, что вам нужно больше отдачи от memcache, лучше использовать модуль memcached. Использование libmemcached предполагает, что сама библиотека, возможно, более оптимизирована, чем версия только для PHP.

Memcached является более новым модулем, по сравнению с memcache. Если вам нужно использовать более старую версию PHP, то вы можете использовать только memcache.

Ответ 4

Недавно использовав php-memcache, я бы посоветовал вам php-memcached. Вот несколько причин, которые мне приходят в голову...

  1. Нет метода getErrorCode() или эквивалентного метода, поэтому, если get() вернет FALSE, вы не будете знать, что значение, хранящееся в memcache, является ложным, или же что возникла какая-то проблема.
  2. Алгоритм последовательного хеширования отличается от других реализаций, например, от многих клиентских библиотек, созданных на основе libmemcached. Это означает, что, если вы хотите использовать один и тот же кластер memcache с несколькими языками, у вас могут возникнуть проблемы, когда вы будете хранить значение в PHP-клиенте, а другие клиенты не смогут его найти. 

Ответ 5

У меня было несколько серьезных проблем с Drupal 6 и php-pecl-memcached, когда время задержки ответа доходило до 5 мс на вызов, а один конкретный сайт создавал в 5 раз больше вызовов, чем до перехода на php-pecl-memcached. Переход на php-pecl-memcache устранил все проблемы: задержку и дополнительные вызовы.

Этот ответ предназначен исключительно для тех, кто использует Drupal 6 и, возможно, Drupal 7.

Схожие статьи

Web

Предпочтительный метод хранения массивов PHP (json_encode vs serialize)

Web

Применение выражения eval в php

Web

Защита веб-серверов PHP

Web

Как заставить PHP перестать заменять символы «.» в массивах $_GET или $_POST

×