Разное

Memcache и memcached: Чем отличаются memcached и memcache

28.09.2023

Что использовать: 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.

Memcache — Hosting, Colocation, Dedicated, VDS/VPS

Содержание

  • 1 Установка Memcached + Memcache
  • 2 FreeBSD 8.2
  • 3 CentOS 6.2
  • 4 Debian 6.0
  • 5 Ubuntu 10.04

Установка Memcached + Memcache

Установка расширения PHP Memcache, также как и демона Memcached недоступна средствами ISPmanager.

FreeBSD 8.2

Устанавливаем и запускаем Memcached: <source lang=ini> cd /usr/ports/databases/memcached make install clean

Добавляем в файл /etc/rc.conf строку: memcached_enable=»YES»

/usr/local/etc/rc.d/memcached start </source>

Устанавливаем раcширение PHP Memcache: <source lang=ini> cd /usr/ports/databases/pecl-memcache make install clean </source>

Перезагружаем Apache: <source lang=ini> /usr/local/etc/rc.

d/apache22 restart </source>

Проверяем загрузку модуля: <source lang=ini> php -m | grep memcache memcache </source>

CentOS 6.2

<source lang=ini> yum install memcached

Вносим настройки в /etc/sysconfig/memcached: PORT=»11211″ USER=»memcached» MAXCONN=»2048″ CACHESIZE=»4096″ OPTIONS=»-l 127.0.0.1″ — слушает localhost </source>

Устанавливаем php-расширение: <source lang=ini> 1. Ищем доступный пакет для установки: yum search memcache Нам нужен из списка php-pecl-memcache.i686 (i686 в конце — для 32-битных систем) Обратите внимание — php-pecl-memcache — без d на конце

2. Устанавливаем: yum install php-pecl-memcache.i686 </source>

Добавляем в автозагрузку и запускаем: <source lang=ini> chkconfig memcached on /etc/init.d/memcached start </source>

Перезапускаем Apache: <source lang=ini> /etc/init.d/httpd restart </source>

Проверяем загрузку модуля: <source lang=ini> php -m | grep memcache memcache </source>

Debian 6.

0

Установка Memcached: <source lang=ini> 1. Находим пакет memcached из репозиторий: aptitude search memcache

2. Устанавливаем: apt-get install memcached </source>

Проверяем — работает ли memcached: <source lang=ini> memcached -u www-data -vv

Если есть подобный вывод: slab class 1: chunk size 80 perslab 13107 slab class 2: chunk size 104 perslab 10082 slab class 3: chunk size 136 perslab 7710 slab class 4: chunk size 176 perslab 5957 slab class 5: chunk size 224 perslab 4681 … skip … <28 server listening (udp) <27 server listening (udp) <28 server listening (udp)

Если нет, то: 1. ldconfig -v 2. killall memcached 3. /etc/init.d/memcached start </source>

Установка Memcache – расширения PHP: <source lang=ini> из того же aptitude search memcache — php5-memcache (в описании — memcache extension module for PHP5) apt-get install php5-memcache </source>

Перезапускаем Apache: <source lang=ini> /etc/init.

d/apache2 restart </source>

Проверяем загрузку модуля: <source lang=ini> php -m | grep memcache memcache </source>

Ubuntu 10.04

Установка Memcached и расширения Memcache: <source lang=ini> apt-get install memcached php5-memcache Если выдает ошибку, то обновим список пакетов, после чего повторим: apt-get update </source>

Перезапуск сервисов Memcached и Apache: <source lang=ini> /etc/init.d/memcached restart /etc/init.d/apache2 restart </source>

php — Когда следует использовать Memcache вместо Memcached?

спросил

Изменено 7 лет, 11 месяцев назад

Просмотрено 146 тысяч раз

Часть коллектива PHP

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

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

  • php
  • memcached
2

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

  1. токенов Cas. Это сделало мою жизнь намного проще и является простой системой предотвращения устаревших данных. Всякий раз, когда вы вытаскиваете что-то из кэша, вы можете получить вместе с ним токен cas (двойное число). Вы можете использовать этот токен для сохранения обновленного объекта. Если никто другой не обновлял значение во время работы вашего потока, замена будет выполнена успешно. В противном случае будет создан новый токен cas, и вам придется перезагрузить данные и снова сохранить их с новым токеном.
  2. Прочитанные обратные вызовы — лучшая вещь со времен нарезанного хлеба. Это упростило большую часть моего кода.
  3. getDelayed() — это полезная функция, которая может сократить время ожидания вашим скриптом результатов, возвращаемых с сервера.
  4. Хотя сервер memcached должен быть очень стабильным, он не самый быстрый. Вы можете использовать бинарный протокол вместо ASCII с новым клиентом.
  5. Всякий раз, когда вы сохраняете сложные данные в 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 большого объема, отвечающих на 25 000 ~ 40 000 вызовов mc->get в секунду. Эти вызовы те, которые делают НЕ должны получить доступ к базе данных.

ИМХО, такое использование memcached обеспечило СЕРЬЕЗНУЮ экономию $$$,$$$ на капитальных затратах на новые серверы и лицензии БД, а также на контрактах на поддержку крупных коммерческих проектов.

2

php — Я запутался с Memcache, Memcached и php5-memcache

спросил

Изменено 9лет, 4 месяца назад

Просмотрено 6к раз

Часть коллектива PHP

Я следовал инструкциям в этом руководстве по установке 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 против php5-mysqli

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *