Memcached — распределённый in-memory кэш с простым протоколом «ключ–значение». На практике он снижает нагрузку на базу данных (MySQL, PostgreSQL): вместо повторного выполнения одного и того же SQL-запроса приложение получает результат из оперативной памяти за доли миллисекунды. Разница в скорости — 50–100 мкс против 5–20 мс у диска.
Как работает
Схема работы:
- Приложение получает запрос (например, страница категории интернет-магазина).
- Генерируется ключ кэша: MD5-хэш или строка вида
category:electronics:page:1. - Проверяется наличие ключа в Memcached (cache hit). Если данные есть — возвращаются мгновенно.
- При отсутствии (cache miss) выполняется запрос к БД, результат сохраняется в Memcached с TTL (10 минут — 24 часа, зависит от данных) и возвращается клиенту.
- При обновлении данных приложение сбрасывает соответствующий ключ или весь кэш.
Для WordPress наиболее распространённый сценарий — объектный кэш (object cache). WordPress имеет встроенный object cache, но по умолчанию он non-persistent (живёт только в рамках одного запроса). Установка drop-in файла object-cache.php с плагином «Memcached Object Cache» подключает постоянное хранение в Memcached: опции сайта, пользователи, термины, посты и метаданные кэшируются между запросами.
Memcached работает на порту 11211/TCP. На хостинге доступность Memcached зависит от тарифного плана: на shared-хостинге обычно недоступен или предоставляется со строгими лимитами памяти (32–128 МБ). На VPS/VDS Memcached устанавливается самостоятельно.
История
Memcached создан Брэдом Фицпатриком в 2003 году для ускорения LiveJournal, который испытывал проблемы с нагрузкой на базу данных при 1 млн пользователей. Исходный код опубликован как open source. К 2004 году Memcached использовали Facebook, Wikipedia, YouTube. Сегодня Memcached поддерживает мультипоточность (с версии 1.5, 2017 год) и протоколы Text и Binary.
Отличия от Redis
Memcached vs Redis: Memcached хранит только строки (до 1 МБ), Redis поддерживает структуры данных (списки, множества, хэши). Memcached не сохраняет данные после перезапуска — при ребуте кэш пуст. Redis поддерживает персистентность (RDB/AOF). Для простого кэширования страниц и объектов — оба подходят, Redis предпочтительнее для очередей задач, сессий и сложных структур.
На что обращать внимание
Выделяйте Memcached достаточно памяти: при заполнении пула сервер вытесняет старые записи по LRU. Для WordPress-магазина с 10 000+ товаров минимум 256 МБ. Не храните в Memcached чувствительные данные без шифрования — базовый протокол не имеет аутентификации. Проверяйте, что порт 11211 закрыт для внешних подключений (iptables или UFW).
Memcached vs Redis: когда использовать что
| Параметр | Memcached | Redis |
|---|---|---|
| Типы данных | только строки | строки, хеши, списки, множества |
| Персистентность | нет (только RAM) | да (RDB, AOF) |
| Кластеризация | клиентская (нет built-in) | Redis Cluster (built-in) |
| Pub/Sub | нет | да |
| Потребление памяти | меньше | больше |
Memcached на сайте оптимален для простого кеширования HTML-фрагментов, запросов к БД, сессий при горизонтальном масштабировании. На типовом VPS Memcached запускается командой apt install memcached и потребляет от 64 MB RAM. Для WordPress плагин W3 Total Cache или LiteSpeed Cache поддерживают Memcached. При наличии сложных структур данных выбирайте Redis.