Содержание

Настройка и проверка работы Memcached для PHP

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

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

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

Пример правильно настроенного Memcache

Используйте скрипты из моей статьи, чтобы разобраться работает у вас кеширование Memcache или нет. Чтобы получить такой результат, как на скриншоте по на нагрузке на Mysql, мне потребовалось почти полтора месяца биться головой о стену.

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

Как проверить работу Memcached без встроенного CLI

Разработчики Memcached изначально закладывали в проект философию максимального минимализма: это просто очень быстрый и легковесный key-value кэш в оперативной памяти. Сам сервер занимается исключительно обработкой сетевых запросов по текстовому или бинарному протоколу, поэтому полноценной интерактивной CLI-утилиты (вроде redis-cli) в комплекте с бинарником «из коробки» вы не найдете.

Вся административная логика вынесена в отдельные пакеты. Такой подход экономит оперативную память на сервере и снижает риски уязвимостей, но у новичков часто возникает вопрос: как тестировать и проверять работу кэша?

Для этого есть два основных пути: специализированные утилиты и прямая работа через консоль.

Способ 1. Набор утилит libmemcached

В зависимости от вашего дистрибутива (Ubuntu/Debian или CentOS/RHEL), в системе часто уже установлен или доступен в репозиториях пакет инструментов. В Ubuntu он называется libmemcached-tools, в CentOS — просто libmemcached.

Главный инструмент здесь — утилита memcstat. Это прямой аналог команды INFO в Redis. Она позволяет быстро стянуть с сервера общую статистику: аптайм, количество активных подключений, объем занятой памяти и hit-rate (эффективность кэширования).

Запускается она одной командой:

memcstat --servers=127.0.0.1

Способ 2. Текстовый протокол и Netcat (nc)

Поскольку Memcached общается понятными текстовыми командами (set, get, stats, flush_all), создавать для него отдельный сложный CLI-клиент не было строгого смысла. Любой системный администратор может поговорить с сервером напрямую через базовые системные утилиты, такие как telnet или nc (Netcat). По сути, обычный Netcat и выполняет роль встроенного CLI.

Например, чтобы заглянуть «под капот» Memcached и проверить состояние чанков и распределение памяти (Slabs), достаточно отправить короткую команду:

echo "stats slabs" | nc 127.0.0.1 11211

Если сервер запущен и работает штатно (даже если он еще пустой), в ответ вы получите системную структуру:

STAT active_slabs 0
STAT total_malloced 0
END

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

Как проверить, установлен ли memcache или memcached для PHP?

  1. По умолчанию memcached слушает порт 11211 с IP:127.0.0.1 (localhost):
    # netstat -tap | grep memcached
    tcp 0 0 localhost:11211 *:* LISTEN 21488/memcached
  2. Вы можете посмотреть вывод функции Использование расширенного phpinfo vs PhpSysInfo или проверить, доступна ли какая-либо из функций memcache.
  3. Код проверит, включено ли расширение memcache, и также работает ли демон и может ли он хранить и извлекать данные успешно
    <?php
    if (class_exists('Memcache')) {
        $server = 'localhost';
        if (!empty($_REQUEST['server'])) {
            $server = $_REQUEST['server'];
        }
        $memcache = new Memcache;
        $isMemcacheAvailable = @$memcache->connect($server);
     
        if ($isMemcacheAvailable) {
            $aData = $memcache->get('data');
            echo '<pre>';
            if ($aData) {
                echo '<h2>Data from Cache:</h2>';
                print_r($aData);
            } else {
                $aData = array(
                    'me' => 'you',
                    'us' => 'them',
                );
                echo '<h2>Fresh Data:</h2>';
                print_r($aData);
                $memcache->set('data', $aData, 0, 300);
            }
            $aData = $memcache->get('data');
            if ($aData) {
                echo '<h3>Memcache seem to be working fine!</h3>';
            } else {
                echo '<h3>Memcache DOES NOT seem to be working!</h3>';
            }
            echo '</pre>';
        }
    }
    if (!$isMemcacheAvailable) {
        echo 'Memcache not available';
    }
     
    ?>

Установка в Ubuntu и поддержка для PHP:

apt install memcached
apt install php8.1-memcache php8.1-memcached

Скрипт проверяет установку memcache или memcached для хостера Timeweb

Обычно сервис memcache доступен по умолчанию на всех серверах виртуального хостинга. Для подключения используйте следующие параметры: сервер: localhost (127.0.0.1); порт: 11211.

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

<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
$mem = new memcached();
$mem->addServer("127.0.0.1",11211);
$result = $mem->get("Test");
if ($result) {
echo $result;
} else {
echo "Тестовый ключ не найден, добавляю... Обновите страницу.";
$mem->set("Test", "Ключ найден, memcached работает") or die("Не получилось...");
}
?>

Просмотр статистики memcached

Для просмотр статистики memcached используются скрипты, входящие в поставку демона

/usr/share/memcached/scripts/memcached-tool 127.0.0.1 stats

Просмотр использования памяти Memcached

/usr/share/memcached/scripts/memcached-tool 127.0.0.1 display

Просмотр содержимого кеша

/usr/share/memcached/scripts/memcached-tool 127.0.0.1 dump | less

Читайте также: Что такое PHP хостинг?, W3 Total Cache позволяет подключить memcached к Wordpress, Установка, настройка, оптимизация хранилища Redis.