memcache requires php memcached extension to be loaded
Memcached и PHP ликбез
Что такое Memcache и какое отношение он имеет к PHP?
Memcache разработан для кэширования данных, генерация которых требует большого количества ресурсов. Такого рода данные могут содержать что угодно, начиная с результатов запроса к базе данных и заканчивая тяжеловесным куском шаблона. Memcached не входит в базовый набор модулей, поставляемых с PHP, однако он доступен в репозитории pecl.
Установка и настройка
В качестве рассматриваемого дистрибутива я решил использовать Debian, потому как он наиболее часто используется при создании web-серверов. Модуль Memcached для PHP доступен в репозитории уже скомпилированным (php5-memcached), но я опишу процесс установки из исходного кода, так как не все репозитории настолько богаты, как дебиановский.
Устанавливаем сервер Memcached
#/etc/memcached.conf
#Memcached будет работать, как демон
-d
#Лог будет складывать туда
logfile / var / log / memcached.log
#Отведём 256 мегабайт ОЗУ под хранилище
-m 256
#Слушать будет этот порт
-p 11211
#В последствии желательно поменять
-u nobody
#Слушаем localhost
-l 127.0.0.1
Проверяем
Компилируем и устанавливаем модуль для PHP
apt-get install php5-dev libmemcache-dev
echo ‘extension=memcache.so’ >> / etc / php5 / apache2 / php.ini
/ etc / init.d / apache2 restart
Примеры использования
1. Базовые операции
В результате выполнения этого кода каждый раз будет выводиться время с точностью до секунд. Однако обновляться оно будет раз в 5 секунд, пока не очистится кэш. В данном примере проиллюстрированы самые простые операции, но в производительности мы скорее потеряем, чем выиграем. Ведь нам каждый раз придётся подключаться к серверу…
2. Повышаем производительность
2.1 С кэшированием
В данном примере приведена функция, которая создаёт изображение размером 800×600 и расставляет на нём 10 000 точек. Один раз, сгенерировав такое изображение, в дальнейшем мы лишь выводим его на экран, не генерируя заново.
2.2 Без кэширования
Тут всё гораздо проще и привычней: генерируем изображение каждый раз заново.
Результаты
Я протестировал оба скрипта на производительность. Одна и та же машина в первом случае выдала 460 ответов в секунду, а во втором лишь 10. Чего и следовало ожидать.
Ещё несколько полезных функций
addServer — в случае, если у вас в распоряжении несколько кэширующих серверов, вы можете создать некий кластер, добавляя сервера в пул. Следует обратить внимание на параметр weight. Он указывает на то, сколько памяти вам будет доступно на конкретном сервере.
delete — из названия понятно, что данный метод удаляет из кэша объект с заданным ключом.
replace — заменяет значение объекта с заданным ключом. Используйте в случае, если Вам понадобится изменить содержимое объекта, раньше чем истечёт время его жизни.
С моей точки зрения, применять кэширование стоит только на высоконагруженных ресурсах. Ведь каждый раз, подключаясь к серверу Memcached, вы тратите драгоценное время, что скорее всего не будет оправданным. Что касается больших проектов, лучше сразу написать больше строк кода, чем потом делать это в попыхах, с мыслью о том, что ваш сервис лежит. Также не стоит забывать о расходовании памяти! Учтите, что положив 300 мегабайт в кэш, вы отняли у себя 300 мегабайт ОЗУ.
В завершение хочу сказать, что данная статья не раскрывает все прелести технологии, однако я надеюсь, что она стимулирует Вас к самосовершенствованию. Спасибо за прочтение, многоуважаемый %username%!
UPD: Ещё один интересный момент. Memcached, есть PHP API к libmemcached. А Memcache, библиотека для php, не использующая libmemcached.
require memcached php extension? #5
Comments
dinamic commented Apr 16, 2013
I’ve tried to install the bundle, but it seems the memcached php extension is a requirement.
What about the users of a shared hosting that does not provide memcached extension?
IMHO this should be a suggestion rather than requirement.
The requirement has to be set for the ext-memcache, which provides the Memcache class.
The text was updated successfully, but these errors were encountered:
We are unable to convert the task to an issue at this time. Please try again.
The issue was successfully created but we are unable to update the comment at this time.
mevdschee commented Apr 18, 2013
Basically you are asking for support for both the memcached and the memcache (without d) extension? Maybe we can add a fallback to a PHP based solution and include that in the bundle? Good feature request, thank you.
dinamic commented Apr 24, 2013
Until this is done we should consider the bundle as OS dependent.
The php_memcached extension relies on the libmemcached library which hasn’t been ported to the Windows OS yet.
mevdschee commented Apr 24, 2013
Yes, the bundle requires the «memcached» PHP extension that is indeed not binary downloadable for Windows. If you need support for this extension on Windows you should ask the PHP maintainers / package builders to include the memcached extension in the Windows builds.
Since your enhancement request for this bundle will lead to a sub-optimal workaround for the unavailability of binary builds of that extension on Windows I will close the enhancement requests regarding the bundle. If your request for inclusion of the «memcached» extension in the Windows PHP builds has failed, you may reopen the request.
At that point, with the reason they can not or do not want to included the extension in the Windows PHP builds, we can see what we can do to change their minds. I read that there are no compilation instructions available for libmemcached on Windows, maybe you ask the maintainers of the libmemcached library to make those. That would be a good first step to persuade the PHP maintainers to include the extension in their builds.
Thank you in advance for your further investigation into this matter and your efforts to improve the open source community.
Cannot use memcached at php 7.0 because of missing Memcache #100
Comments
pohlaniacz commented Aug 31, 2017
Hi, I can’t install php5-memcache because it’s not available at Debian with php 7.0, so I’m getting an error «Memcache extension is not loaded! To configure pools it MUST be loaded!». Of course memcached extensions is loaded properly, how can I fix/bypass this?
The text was updated successfully, but these errors were encountered:
We are unable to convert the task to an issue at this time. Please try again.
The issue was successfully created but we are unable to update the comment at this time.
mevdschee commented Aug 31, 2017
@pohlaniacz I’m afraid you can’t because there is a memcache and a memcached (with a «d») extension. The memcached extension is not supported. You may have to install the memcache extension via PECL.
pohlaniacz commented Aug 31, 2017
skoop commented Mar 26, 2018
I’m running into this as well, and installing memcache via PECL seems to not be that easy on PHP 7.1. Given the memcache extension is sort of deprecated, is there any chance of a newer version of this bundle using memcached?
mevdschee commented Mar 26, 2018 •
Given the memcache extension is sort of deprecated
Is it? Do you have a reference?
any chance of a newer version of this bundle using memcached?
I tried hard to implement it, but without much luck. Some of the object interfaces of memcached are not fully PHP compatible (parameters that are references and optional if I recall correctly).
I think you are better of with memcache than with memcached. Also memcached does (or at least did) not support windows users (AFAIK).
skoop commented Mar 26, 2018
memcache extension is not packaged with PHP anymore, and if you try to build it on PHP 7.1 you get errors because some PHP header files are renamed in PHP7.
For now I’ve solved the problem by using a fork of the memcache extension that is still maintained (https://github.com/websupport-sk/pecl-memcache) but as you can see from the official PECL page the last release was in 2013: http://pecl.php.net/package/memcache.
This means I’ve now been able to upgrade our development docker containers to PHP 7.1 with the above memcache extension, but I’m not sure if our sysadmins will be willing to upgrade production to such a fork.
Memcached on the other hand still has a recent release (and pretty regular updates anyway): http://pecl.php.net/package/memcached
It might be worth looking at re-implementing Memcached support. I’ve unfortunately not got enough time for it in the upcoming weeks to have a look at this but will see if my client has some time to free up to experiment with this.
mevdschee commented Mar 26, 2018 •
memcache extension is not packaged with PHP anymore
Nor is or was the php memcached extension.
Memcached on the other hand still has a recent release
But is notoriously known for it’s bad support on Windows.
It might be worth looking at re-implementing Memcached support.
AFAIK distributions (such as Debian and Centos) have chosen to build and include the beta versions (of php-memcache). So IMHO you better invest time in getting official builds of php-memcache out, then to rework this package from one sub-par dependency to the other. Honest advice, really 🙂
Оптимизация работы с базой данных с помощью Memcached
Установка и настройка расширения PHP Memcached
Что такое Memcached?
Memcached – это хранилище данных в памяти с открытым исходным кодом и возможностью масштабирования, используемое в качестве кэша или хранилища сессий и обеспечивающее время отклика на уровне долей миллисекунды.
Список поддерживаемых языков программирования: Python, Java, PHP, C/C#/C++, Perl, Go, Ruby, JavaScript, Node.js.
Список поддерживаемых протоколов: ASCII, Протокол передачи двоичных данных, TCP и UDP.
Как работает Memcached?
Memcached, в отличие от баз данных не нуждается в доступе к диску или твердотельному накопителю, а производит сохранение необходимых данных в оперативную память, тем самым исключает задержки, связанные с поиском этих данных и обеспечивает более быстрый доступ к ним.
Оптимизация работы с базой данных с помощью Memcached
Предположим, нам необходимо сохранять некоторые временные данные, сохранность которых для нас не критична. Объем данных небольшой, но при этом мы вынуждены использовать большое количество запросов. Memcached-server для данной задачи подойдет как нельзя лучше. Для сравнения попробуем записать и прочесть 10000 строк в memcache и mysql:
$start = microtime(true);
$memcache_obj = memcache_connect(‘unix:///home/u/ user /.memcached.sock’, 0);
for ($i=0;$i user ‘);
Замеряем время записи и чтения в секундах.
Memcached: 0.36154913902283 (sec)
MySQL: 20.56244802475 (sec)
Да, для mysql можно оптимизировать запрос, использовать иные движки для хранения и т.п., но все равно, Memcached-server, как сервис хранящий данные в оперативной памяти на основе хеш-таблицы будет выигрывать по скорости у реляционных баз данных всегда.
Memcached доступен на тарифах линейки » Реактивный » и » Power «.
Инструкция включения Memcached на различных CMS доступна по ссылке : https://help.sweb.ru/entry/860/
Топ-6 сервисов для проверки кроссбраузерности сайта
Настройка и использование Memcached
В статье мы расскажем, что такое Memcache, зачем он нужен и как он влияет на работу некоторых популярных CMS.
Мы решили исправить этот недостаток, используя технологию контейнеров Docker, нами был создан специальный сервис «memcache». Теперь каждый может установить свой личный memcached, в котором будут гарантированно только Ваши данные.
Подключить персональный memcached возможно в Панели управления, в разделе Сервисы.
Для многих систем управления сайтом (CMS) существуют механизмы работы с memcached. Далее мы рассмотрим настройку memcached для самых популярных CMS и проведем нагрузочное тестирование с целью узнать, как изменится производительность сайта.
Для тестирования производительности сайтов будем использовать утилиту siege.
Для каждой CMS будем проводить тестирование со временем 5 минут.
WordPress и memcache
Для установки плагина работы с memcache, нужно зайти в административную панель сайта (http://site.ru/wp-admin/), затем в выпадающем списке меню «Плагины», выбрать пункт «Добавить новый»:
На открывшейся странице в верхней части есть поиск по плагинам, нужно ввести в это поле название плагина WP-FFPC и нажать «Enter»:
Затем нажать «Установить»:
И активировать плагин:
Готово, плагин установлен, осталось его настроить, для этого нужно зайти в настройки плагина:
Установить тип расширения PHP Memcache (без d) можно для версий PHP 7.2 и ниже. Для версии 7.3 и выше Вы сможете выбрать только PHP Memcahed. Различия между этими двумя расширениями несущественны, оба расширения отвечают за подключение сайта к сервису Memcached.
Затем необходимо нажать «Сохранить настройки» (кнопка внизу страницы), в верхней части страницы должно появится сообщение о том, что настройки сохранены и плагин успешно работает с memcached:
Также стоит отметить, что в настройках плагина (вкладка «Backend settings») есть возможность указать логин/пароль для подключения к memcached:
указывать их не нужно, так как доступ к memcached возможен только с вашего аккаунта.
в конфигурационный файл CMS wp-config.php (находится в корневой директории сайта), о чем нам напоминает сам плагин:
Отредактировать wp-config.php можно как через консоль ssh, например через утилиту PuTTy, так и через Файловый менеджер, который встроен в Панель управления хостингом:
На этом настройку можно закончить, сайт будет использовать систему кеширования memcached.
Скорректировать настройки кеширования при необходимости можно в настройках плагина, например, время «жизни» кеша для определенных элементов сайта:
Ключ для кеширования:
На вкладке «Cache exceptions» можно настроить различные исключения для кеширования, такие как:
Результат с включенным memcached:
Как видно, кеширование уменьшило время ответа сервера в 4 раза.
Joomla и memcache
В CMS Joomla! система кеширования (memcached) уже присутствует, её нужно лишь включить. Для это необходимо зайти в панель управления сайтом (по умолчанию: http://site.ru/administrator/), затем перейти в раздел Сайт->Общие настройки:
Выбрать пункт «Система«:
В правой части страницы будет находиться раздел с настройками кеширования, параметры должны быть установлены следующим образом:
Нажать кнопку «Сохранить» в верхней части страницы.
Готово, сайт настроен для работы с memcached.
Проведем замер производительности, без использования memcached:
С использованием memcached:
Хоть разница показателей и незначительна, но с увеличением количества контента на сайте и его посещаемости эта разница будет увеличиваться.
Drupal и memcache
Первым делом нужно подключится к серверу по ssh, например через утилиту PuTTy, затем в консоли ssh-клиента перейти в корневую директорию сайта с drupal‘ом:
Полный путь до сайта можно посмотреть в Панели управления, в разделе Сайты:
и выполнить команду:
после чего появится сообщение:
Плагин установлен, осталось добавить несколько строк настроек в файл конфигурации CMS, по умолчанию этот файл (относительно корня сайта) находится по пути
./sites/default/settings.php
Для его редактирования из консоли можно воспользоваться одним из редакторов файлов, например vim или nano, также файл можно отредактировать из Панели управления, перейдя в раздел Файловый менеджер:
В начало файла следуют добавить следующие строки:
Установка плагина завершена, осталось его активировать, для это нужно зайти в административную панель сайта http://site.ru/admin/ перейти в раздел «Модули»:
в самом низу страницы отметить чекбоксы для активации плагина и нажать кнопку «Сохранить»:
Установка завершена, сайт использует кеширование memcache.
Проведем тест скорости загрузки страниц сайта с помощью siege:
Без использования memcached:
с использование memcached:
Видим прирост производительности на одну треть.
Bitrix и memcache
Для подключения кеширования memcache в CMS Bitrix необходимо отредактировать файл:
./bitrix/php_interface/dbconn.php (если версия ядра меньше 14.0)
./bitrix/.settings_extra.php (если версия ядра выше 14.0). Если файл ./bitrix/.settings_extra.php отсутствует, то его необходимо создать.
Версию ядра можно посмотреть в разделе администрирования сайта, по умолчанию это ссылка:
http://site.ru/bitrix/admin/index.php
Отредактировать необходимый файл можно, подключившись к серверу по ssh, используя утилиту PuTTy, или через Файловый менеджер, который встроен в Панель управления хостингом.
Если редактируется файл ./bitrix/php_interface/dbconn.php (версия ядра меньше 14.0), то следует добавить строки:
Если редактируется файл ./bitrix/.settings_extra.php (версия ядра выше 14.0), то следует добавить строки:
Для проверки, что сайт использует memcached, следует перейти в административную панель сайта->настройки->панель производительности->Битрикс:
Хранение кеша должно быть установлено в memcache:
Сравним производительность сайта.
Без использования memcached:
с использование memcached:
Видим, что сервер тратит меньше времени на генерацию страницы:
С увеличением контента и посетителей ресурса разница будет значительнее.
Насколько мы видим, все представленные CMS работают быстрее. При этом тестирование проводилось на CMS «из коробки» (установка производилась из Панели управления, раздел CMS), т.е. без контента, а это означает, что на рабочих и заполненных сайтах увеличение скорости работы будет видно более явно.
Webasyst и memcache
Для использования memcached с Webasyst требуется создать в каталоге сайта файл wa-config/cache.php с следующим содержимым:
Убедиться, что кэширование работает, можно, создав в корне сайта файл с таким кодом:
При обращении к нему будут выведены все ключи данных, хранящихся в Memcached.