Что такое Memcached?

Memcached - это высокопроизводительная система распределенного кэширования данных в оперативной памяти (RAM). Она используется для ускорения работы веб-приложений за счет хранения часто запрашиваемых данных в памяти вместо повторного обращения к базе данных или другим медленным источникам.

Основная задача Memcached - снизить нагрузку на серверы баз данных и уменьшить время ответа приложения.

Memcached является одним из самых популярных решений для кэширования и широко используется в высоконагруженных проектах.

Зачем нужен Memcached

Современные веб-приложения постоянно обращаются к базе данных:

  • получение информации о пользователе;
  • загрузка списка товаров;
  • вывод комментариев;
  • построение статистики;
  • генерация страниц.

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

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

Именно эту задачу и решает Memcached.

Как работает Memcached

Принцип работы достаточно простой:

  1. Клиент запрашивает данные.
  2. Приложение сначала обращается к Memcached.
  3. Если данные найдены, они сразу возвращаются пользователю.
  4. Если данных нет (cache miss), приложение получает их из базы данных.
  5. Полученные данные сохраняются в Memcached на определенное время.
  6. Следующие запросы уже будут получать информацию из памяти.

Схема выглядит следующим образом:

Пользователь
      │
      ▼
Приложение
      │
      ▼
Memcached
   │       │
Есть      Нет
   │        │
   ▼        ▼
Ответ   База данных
            │
            ▼
      Сохранить в кэш

Такой подход позволяет значительно сократить количество запросов к базе данных.

Почему Memcached работает быстро

Главная причина высокой производительности заключается в использовании оперативной памяти.

Скорость доступа:

Источник данных Приблизительное время доступа
RAM десятки наносекунд
SSD десятки-сотни микросекунд
HDD несколько миллисекунд
Запрос к удаленной БД миллисекунды или десятки миллисекунд

Memcached хранит все данные исключительно в памяти, поэтому чтение выполняется практически мгновенно.

Какие данные можно хранить

Memcached работает по принципу "ключ-значение" (Key-Value).

Например:

user:125

{
    "id": 125,
    "name": "Alex",
    "email": "alex@example.com"
}

Или:

product:548

{
    "name": "Laptop",
    "price": 1499
}

Чаще всего в Memcached помещают:

  • результаты SQL-запросов;
  • объекты пользователей;
  • данные сессий;
  • результаты вычислений;
  • HTML-фрагменты;
  • конфигурацию приложения;
  • данные API;
  • списки товаров;
  • меню сайта;
  • настройки.

Основные операции

Memcached поддерживает небольшой набор команд.

Сохранение значения

set user:125 {...}

Получение

get user:125

Удаление

delete user:125

Изменение времени жизни

touch user:125

Увеличение числового значения

incr counter

Уменьшение значения

decr counter

Благодаря минимальному набору операций Memcached остается очень быстрым.

Время жизни данных

Каждый объект имеет TTL (Time To Live).

Например:

user:125
TTL = 600 секунд

Через 10 минут запись автоматически исчезнет.

Можно сохранять данные:

  • на несколько секунд;
  • на минуты;
  • на часы;
  • на дни.

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

Что происходит при нехватке памяти

Memcached не записывает данные на диск.

Когда память заканчивается, он начинает удалять старые записи.

Для этого используется алгоритм LRU (Least Recently Used).

Он удаляет записи, которые не использовались дольше остальных.

Например:

A  использовался 1 секунду назад
B  использовался 5 секунд назад
C  использовался 30 минут назад

При нехватке памяти первой будет удалена запись C.

Это позволяет автоматически освобождать память под более востребованные данные.

Особенности хранения данных

Memcached хранит данные:

  • только в оперативной памяти;
  • без сохранения после перезапуска;
  • без резервного копирования;
  • без журналирования.

После перезапуска сервера весь кэш очищается.

Поэтому Memcached подходит исключительно для хранения временных данных.

Никогда нельзя использовать его как основное хранилище информации.

Распределенное кэширование

Memcached поддерживает работу сразу с несколькими серверами.

Например:

Server 1
Server 2
Server 3
Server 4

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

Обычно используется алгоритм хеширования.

Благодаря этому нагрузка распределяется между несколькими узлами.

Memcached и база данных

Типичная схема выглядит так:

Запрос

↓

Memcached

↓

Есть данные?
│
├── Да → вернуть результат
│
└── Нет
      │
      ▼
 База данных
      │
      ▼
Сохранить в Memcached
      │
      ▼
Вернуть пользователю

Такая схема называется Cache Aside или Lazy Loading.

Она является наиболее распространенной стратегией использования Memcached.

Использование с PHP

В PHP существуют два популярных расширения:

  • memcache;
  • memcached.

Рекомендуется использовать расширение memcached, так как оно активно поддерживается и основано на библиотеке libmemcached.

Пример подключения:

$memcached = new Memcached();

$memcached->addServer('127.0.0.1', 11211);

Сохранение объекта:

$user = [
    'id' => 1,
    'name' => 'Alex'
];

$memcached->set('user:1', $user, 600);

Получение:

$user = $memcached->get('user:1');

if ($user === false) {
    echo 'Кэш отсутствует';
}

Использование стратегии Cache Aside:

$key = 'user:1';

$user = $memcached->get($key);

if ($user === false) {
    $user = $database->findUser(1);

    $memcached->set($key, $user, 600);
}

return $user;

Подобная схема применяется практически во всех современных PHP-приложениях.

Преимущества Memcached

Основные достоинства:

  • очень высокая скорость работы;
  • простая архитектура;
  • низкое потребление ресурсов;
  • легкая масштабируемость;
  • поддержка большого количества клиентов;
  • эффективное снижение нагрузки на базу данных;
  • простота интеграции практически с любым языком программирования.

Недостатки

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

  • отсутствует постоянное хранение данных;
  • после перезапуска весь кэш теряется;
  • нет встроенной репликации;
  • отсутствуют сложные структуры данных;
  • невозможно выполнять поиск по содержимому;
  • нет поддержки транзакций;
  • ограниченные возможности по сравнению с современными in-memory базами данных.

Memcached или Redis

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

Возможность Memcached Redis
Хранение в памяти Да Да
Постоянное хранение на диске Нет Да
Простые пары "ключ-значение" Да Да
Списки, множества, хэши Нет Да
Репликация Нет Да
Pub/Sub Нет Да
Lua-скрипты Нет Да
Простота Очень высокая Высокая
Скорость простых операций Очень высокая Очень высокая

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

Практические рекомендации

При использовании Memcached стоит учитывать несколько важных моментов:

  • кэшируйте только данные, получение которых действительно дорого по времени или ресурсам;
  • выбирайте TTL в зависимости от частоты обновления данных;
  • не храните критически важные данные, так как кэш может быть очищен в любой момент;
  • используйте понятные и единообразные ключи, например user:123, product:456, settings:site;
  • следите за количеством промахов кэша (cache miss), чтобы оценивать эффективность стратегии кэширования;
  • контролируйте объем памяти и при необходимости увеличивайте его или распределяйте нагрузку между несколькими серверами.

Заключение

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

Благодаря простоте, высокой скорости и поддержке распределенного кэширования Memcached остается востребованным решением для веб-приложений, API и высоконагруженных сервисов. При правильной стратегии кэширования он способен существенно повысить масштабируемость системы без изменения бизнес-логики приложения.

  • 27.06.2026