memcache против memcached?


76

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

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

Я установил его через yum install memcached

Но теперь мне нужно подключиться к PHP, и есть расширение с именем memcache и расширение с именем memcached? ARGH

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

Может ли кто-нибудь указать мне правильное направление здесь ... какой из них будет работать?

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


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

@thanksyo, пожалуйста, снимите галочку с ответа, который вы проверили. Это просто запутает больше людей, приходящих сюда поздно. Тем временем я отказался от неправильного ответа и предлагаю другим делать то же самое, пока спасибо не успеет снять его.
Joedevon

Ответы:


24

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

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

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

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

Модуль 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 .

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


70
Является ли название проекта действительно подходящей причиной для выбора одной реализации над другой?
Дэвид Пашли

4
Дэвид: Не совсем ... но, безусловно, достаточно причины оставить конкретную реализацию до последнего в моем тестировании, тем самым эффективно отдавая предпочтение другим (и). Скорее всего, я бы все же попробовал все доступные реализации, но технические недостатки в описании программного обеспечения автора, как правило, заставляют меня задуматься о том, какие технические недостатки могут заключаться в программном обеспечении. Тем не менее, я прочитал ваш комментарий о реальном программном обеспечении, поэтому я также дал вам ответ за ваш ответ. :-)
Джессика Маккиннон

4
Я никогда не думал, что буква «d» в memcached означает «Деймон», но означает прошлое причастие кеша глаголов. Кроме того, вы не можете назвать новый интерфейс «memcache», так как уже был один с таким именем.
GetFree

9
Количество ошибок и то, активно ли развивается расширение или нет, гораздо важнее, чем анализировать проблемные d. Серьезно, вы не должны даже думать о тестировании одного расширения последним из-за чего-то подобного, оно совершенно не в
ногу

12
Хм, оба не функционально одинаковы: memcachedнапример, поддерживает токены, memcacheнет. Если вам это нужно, вы знаете, какой (плохо названный или нет) выбрать.
Wrikken

56

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

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

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


2
Upvote для добавления некоторых шагов по устранению неполадок.
Джессика Маккиннон

Это действительно четкий ответ.
Данидакар

@Nate, что такое эквивалент Windows ps auxwww | grep memcached?
Pacerier

1
@Pacerier: взгляните на superuser.com/questions/415360/… . Process Explorer - это самый простой способ найти работающий процесс и увидеть его аргументы командной строки.
конец

@Pacerier - эта команда, проверяющая, запущен ли процесс сервера, и отслеживающая его запуск.
Ясен

27

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

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


Отличное объяснение!
Джон

21

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

Люди, которые порекомендуют вам выбрать одно из другого, основываясь исключительно на правильности названия, на самом деле не имеют бизнеса, предлагающего технические консультации.


6

Недавно воспользовавшись php-memcache, я должен указать вам на php-memcache.

Вот несколько причин из головы ...

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

2) Кажется, что его алгоритм хеширования для согласованного хеширования отличается от других реализаций, таких как множество клиентских библиотек, созданных из libmemcached. Это означает, что если вы хотите использовать один и тот же кластер memcache с несколькими языками, у вас, скорее всего, возникнут проблемы, при которых вы сохраните значение с помощью клиента PHP, а другие клиенты его не найдут.


3

У обоих есть проблемы на сегодняшний день. PECL / memcache старый и надежный, за некоторыми исключениями, если он устарел. PECL / memcached 1.x в лучшем случае является бета-версией. Некоторые функции не работают с цифровыми клавишами, они пропускают соединения при использовании постоянных соединений. Некоторые (все?) Исправлены в GitHub и будут выпущены в какой-то момент в 2.x, но не сегодня. Для более подробного обзора см. Http://brian.moonspot.net/php-memcached-issues


PECL / memcached 1.x теперь стабилен; PECL / memcache 2.x ограничен; PECL / memcache 3.x крайне нестабилен.
Aredridel

2

Я работаю над книгой "Эксперт PHP и MySQL". Я написал почти то же самое о различиях. То, что я рекомендовал, было PECL / memcached. # 1 - оборачивается полнофункциональной хорошо работающей библиотекой C # 2 - поддерживается совсем недавно. № 3 - больше возможностей. Нет пренебрежения к PECL / memcache.


0

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

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


-3
  • memcache - это клиент memcached (сервер)
  • libmemcached также является клиентом для memcached

И есть другие клиенты для memcached, см. Http://code.google.com/p/memcached/wiki/Clients

Вырезать и вставить из Интернета:

http://www.php.net/manual/en/intro.memcache.php

  Memcache module provides handy procedural and object oriented 
  interface to memcached, highly effective caching daemon, which was 
  especially designed to decrease database load in dynamic web applications.
The Memcache module also provides a session handler (memcache).
More information about memcached can be found at » www.memcached.org 

http://www.php.net/manual/en/intro.memcached.php

   » memcached (http://www_memcached_org/) is a high-performance, distributed 
  memory object caching system, generic in nature, but intended for use in 
  speeding up dynamic web applications by alleviating database load.
  This extension uses libmemcached library to provide API for communicating with
  memcached servers. It also provides a session handler (memcached).
  Information about libmemcached can be found at 
   » tangent.org/552/libmemcached.html

http://pecl.php.net/package/memcached "Расширение PHP для взаимодействия с memcached через библиотеку libmemcached" Это расширение использует библиотеку libmemcached для предоставления API для связи с серверами memcached. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache «расширение memcached» Memcached - это демон кэширования, разработанный специально для динамических веб-приложений, чтобы уменьшить нагрузку на базу данных путем хранения объектов в памяти. Это расширение позволяет работать с memcached через удобный OO и процедурный интерфейс.

http://code.google.com/p/memcached/wiki/PHPClientComparison

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached

6
Этот многословный ответ даже близко не подходит для того, чтобы прояснить ситуацию для автора. Афиша уже знает, что есть несколько клиентов. Перечисление их и предложение альтернативных имен не облегчает выбор правильного.
Мартин Хеемельс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.