Что использовать: 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. Вот несколько причин, которые мне приходят в голову…
- Нет метода getErrorCode() или эквивалентного метода, поэтому, если get() вернет FALSE, вы не будете знать, что значение, хранящееся в memcache, является ложным, или же что возникла какая-то проблема.
- Алгоритм последовательного хеширования отличается от других реализаций, например, от многих клиентских библиотек, созданных на основе libmemcached. Это означает, что, если вы хотите использовать один и тот же кластер memcache с несколькими языками, у вас могут возникнуть проблемы, когда вы будете хранить значение в PHP-клиенте, а другие клиенты не смогут его найти.
Ответ 5
У меня было несколько серьезных проблем с Drupal 6 и php-pecl-memcached, когда время задержки ответа доходило до 5 мс на вызов, а один конкретный сайт создавал в 5 раз больше вызовов, чем до перехода на php-pecl-memcached. Переход на php-pecl-memcache устранил все проблемы: задержку и дополнительные вызовы.
Этот ответ предназначен исключительно для тех, кто использует Drupal 6 и, возможно, Drupal 7.
memcached vs memcache — Stack Overflow на русском
Вопрос задан
Изменён 6 лет 1 месяц назад
Просмотрен 2k раз
Прошу прощения за, возможно, очевидный вопрос, но я только начал смотреть в сторону этих инструментов. Знаю только что один старый, а другой новый. Может ли уважаемое сообщество объяснить разницу между этими инструментами и их сферы применения?
Спасибо.
- memcached
Продукта, под названием «memcache», AFAIK, не существует.
Есть «memcached» (быстрое key-value хранилище в памяти), и есть «MemcacheDB» (использует протокол memcached, но хранит данные, если правильно помню, в BerkeleyDB, обеспечивая персистентность).
Догадаюсь откуда растут ноги. У PHP есть два клиента, как раз, зовущихся один «memcache», а другой — «memcached». Собственно, есть таблица со сравнением этих двух клиентов, по ней, думаю, все должно быть понятно.
pecl/memcache | pecl/memcached | |
---|---|---|
Первый релиз | 2004-06-08 | 2009-01-29 (beta) |
Внешние зависимости | Нет | libmemcached |
Автоисправление ключа¹ | Да | Нет |
Добавление в начало/конец | Нет | Yes |
Автоматическая сериализация | Да | Да |
Бинарный протокол | Нет | Опционально |
CAS | Нет | Да |
Сжатие | Да | Да |
Таймауты | Только на подключние | Различные опции |
Консистентное хэширование | Да | Да |
Отложенный GET | Нет | Да |
GET нескольких значений за запрос | Да | Да |
Поддержка сессий PHP | Да | Да |
SET/GET на указанный сервер | Нет | Да |
Хранение чисел | Преобразуются в строки | Да |
¹) При попытке SET или GET на некорректный ключ, memcache преобразует некорректный ключ в корректный, а вернет false
.
2
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
php — Когда следует использовать Memcache вместо Memcached?
спросил
Изменено 7 лет, 4 месяца назад
Просмотрено 145 тысяч раз
Похоже, что в PHP есть две библиотеки memcached с именами memcache и memcached. В чем разница и как узнать, какой из них использовать? Один устарел? Кажется, что memcached предлагает больше методов, поэтому я предполагаю, что это означает, что он получил наибольшее развитие, но, похоже, для него также требуются внешние библиотеки C/C++, поэтому я не уверен, смогу ли я его установить.
Похоже, что memcache существует дольше, не требует дополнительных библиотек и имеет предварительно скомпилированные бинарники даже для Windows! Я думаю, что это был бы лучший выбор на данный момент. Однако, будучи новичком в memcached (сервере), я не уверен, что в memcached (php) есть какие-то очень важные функции, которые оправдывают дополнительные усилия.
- php
- memcached
2
Клиентская библиотека Memcached была недавно выпущена как стабильная. Его используют digg (был разработан для digg Андреем Змиевским, теперь уже не с digg) и реализует протокол memcached в гораздо большей степени, чем старый клиент memcache. Наиболее важными функциями memcached являются:
- токенов Cas. Это сделало мою жизнь намного проще и является простой системой предотвращения устаревших данных. Всякий раз, когда вы вытаскиваете что-то из кэша, вы можете получить вместе с ним токен cas (двойное число). Вы можете использовать этот токен для сохранения обновленного объекта. Если никто другой не обновлял значение во время работы вашего потока, замена будет выполнена успешно. В противном случае будет создан новый токен cas, и вам придется перезагрузить данные и снова сохранить их с новым токеном.
- Прочитанные обратные вызовы — лучшее, что есть со времен нарезанного хлеба. Это упростило большую часть моего кода.
- getDelayed() — это полезная функция, которая может сократить время ожидания вашим скриптом результатов, возвращаемых с сервера.
- Хотя сервер memcached должен быть очень стабильным, он не самый быстрый. Вы можете использовать бинарный протокол вместо ASCII с новым клиентом.
- Всякий раз, когда вы сохраняете сложные данные в memcached, клиент всегда выполнял сериализацию значения (что медленно), но теперь с клиентом memcached у вас есть возможность использовать igbinary. До сих пор у меня не было возможности проверить, насколько это может повысить производительность.
Всех этих пунктов мне хватило, чтобы перейти на новейший клиент, и могу вам сказать, что он работает как шарм. Существует эта внешняя зависимость от библиотеки libmemcached, но тем не менее удалось установить ее на Ubuntu и Mac OSX, так что пока никаких проблем.
Если вы решите обновить библиотеку до более новой, я предлагаю вам обновить ее до последней версии сервера, так как она также имеет несколько приятных функций. Вам нужно будет установить libevent, чтобы он скомпилировался, но в Ubuntu это не составило особых проблем.
Я пока не видел, чтобы какие-либо фреймворки использовали новый клиент memcached (хотя я не отслеживаю их), но я предполагаю, что Zend скоро появится на борту.
ОБНОВЛЕНИЕ
В Zend Framework 2 есть адаптер для Memcached, который можно найти здесь
9
При использовании Windows сравнение обрывается: memcache
оказывается единственным доступным клиентом.
4
Memcached — это более новый API, он также предоставляет memcached в качестве поставщика сеансов, что может быть полезно, если у вас есть ферма серверов.
После того, как версия все еще очень низкая 0.2, но я использовал обе, и у меня не было серьезных проблем, поэтому я бы перешел на memcached, поскольку он новый.
4
Это 2013 год. Забудьте о комментариях 2009 года. Точно так же, если у вас серьезные нагрузки по трафику, даже не думайте, как обойтись с memcache на основе Windows. При работе с очень большим масштабом (500+ интерфейсных веб-серверов) и 20+ внутренних серверов баз данных и репликантов (смесь mysql и mssql) ферма серверов memcached (12 серверов в группе) поддерживает несколько приложений OLTP большого объема, отвечающих на 25K. ~ 40K MC->получить вызовы в секунду. Эти вызовы те, которые делают НЕ должны получить доступ к базе данных.
ИМХО, такое использование memcached обеспечило СЕРЬЕЗНУЮ экономию $$$,$$$ на капитальных затратах на новые серверы и лицензии БД, а также на контрактах на поддержку крупных коммерческих проектов.
2
php — Я запутался с Memcache, Memcached и php5-memcache
спросил
Изменено 8 лет, 9несколько месяцев назад
Просмотрено 6к раз
Я следовал инструкциям в этом руководстве по установке nginx, php и mysql, включая php5-memcache.
Мне интересно, нужно ли мне по-прежнему устанавливать memcache или memcached без префикса «php5».
На данный момент мой сайт WordPress жалуется на ff:
Следующие серверы memcached не отвечают или не работают: Кэш страницы: 127.0.0.1:11211. Кэш базы данных: 127.0.0.1:11211. Кэш объектов: 127.0.0.1:11211. Это сообщение автоматически исчезнет, как только проблема будет решена.
Если его необходимо установить, не будет ли он конфликтовать с php5-memcache? Или что-то вроде чрезмерного использования двух версий?
А какую версию лучше использовать? Memcache или Memcached? php5-memcache или php5-memcached.
Я слышал, что memcached с буквой «d» — это просто служба или демон. Но кто-то пытается сравнить их с тем, что я видел здесь.
- php
- nginx
- memcached
- ubuntu-12.04
Названия этих расширений сбивают с толку.
На самом деле, и php5-memcache, и php5-memcached являются расширениями PHP для работы с сервисом memcached (сервером Memcached). Оба они дают вашим PHP-процессам возможность быть клиентами службы memcached, то есть подключаться к memcached по сети и говорить по протоколу memcached, чтобы использовать memcached API.
Расширение php5-memcached более стабильно и, на мой взгляд, имеет больше возможностей , поэтому я бы посоветовал сначала попробовать его. Большинство его операций также выполняются быстрее (исходник php для эталонного теста, который дал эти результаты).
Вам по-прежнему нужен фактическая служба memcached , запущенная где-то, и ее адрес, чтобы подключиться к ней. Служба memcached может быть запущена на том же хосте или на другом хосте/хостах, если вам нужен распределенный кэш .
memcache и memcached — это 2 разных сервера, каждый из которых имеет некоторые функции и прочее, вы можете прочитать различия, так как было так много предыдущих вопросов об этом, проверьте поиск google
Те, которые начинаются с php, являются расширениями, используемыми для доступа к службе, просто например, для использования mysql вам нужен php5-mysql, а для использования curl вам нужен php5-curl.
Итак, у вас есть php5-memcache для memcache и php5-memcached для memcached, вы можете прочитать о том, что каждый из них предоставляет по этим ссылкам:
memcached lib и memcahe lib
EDIT: Просто хочу исправить ошибку информация, которую я написал выше, как php5-memcache
, так и php5-memcached
подключаются к серверу memcached
, это просто разные расширения для одного и того же сервера, я думаю, так же, как php5-mysql
vs php5-mysqli
Вы по-прежнему можете использовать оба вместе, конфликта нет, но я считаю, что вам нужен только один, а не оба, потому что большинство функций доступны с обоими, некоторые предоставляют немного больше функций, другой сервис-кандидат — redis
, вы должны прочитать в у него также есть некоторые функции, недоступные на серверах memcached.