Memcached — in-memory key-value хранилище с LRU-вытеснением данных. Специализируется на кэшировании: хранит сериализованные данные в RAM, снижая нагрузку на СУБД. Протокол взаимодействия — текстовый или бинарный через TCP/UDP. Клиент вычисляет хэш ключа с помощью алгоритма consistent hashing и обращается к нужному серверу из пула — горизонтальное масштабирование без координатора.
Принцип работы
Приложение проверяет кэш перед SQL-запросом: get cache:user:123. Cache hit — возвращает из RAM без обращения к БД. Cache miss — выполняет SQL, помещает результат в Memcached: set cache:user:123 0 3600 [data] (TTL = 3600 с). При записи в БД кэш инвалидируется: delete cache:user:123.
Memcached работает по принципу slab allocator: память делится на классы слабов разного размера (64 байта до 1 МБ). Максимальный размер одного значения — 1 МБ. Если память заполнена, вытесняет наименее востребованные записи (LRU). Никакой персистентности: перезапуск Memcached очищает весь кэш.
История
Memcached создан Брэдом Фицпатриком (Brad Fitzpatrick) в 2003 году для LiveJournal: сайт с 1 млн пользователей умирал под нагрузкой SQL-запросов. Первая версия написана на Perl, через год переписана на C. В 2004 году код опубликован с открытой лицензией. Facebook к 2009 году использовал Memcached на 800+ серверах с суммарным кэшем 28 ТБ. С 2010-х конкурент Redis отвоёвывает нишу: Redis поддерживает персистентность, репликацию и более богатые структуры данных. Memcached версии 1.6.x (2019–2024) добавил TLS, MetaGets API и Extstore (расширение кэша на SSD).
Memcached vs Redis
| Параметр | Memcached 1.6 | Redis 7 |
|---|---|---|
| Структуры данных | Только string (до 1 МБ) | String, Hash, List, Set, Sorted Set, Stream |
| Персистентность | Нет | RDB-снапшоты + AOF-лог |
| Репликация | Нет (клиентский sharding) | Master-replica, Cluster mode |
| Pub/Sub | Нет | Да |
| Multi-threading | Да (с 1.5, 2018) | Event loop + worker threads (Redis 6+) |
| Потребление RAM | Ниже (на чистые key-value) | Выше (метаданные объектов) |
Применение в хостинге
На виртуальном хостинге Memcached недоступен — требует отдельного процесса. На VPS: apt install memcached, конфиг /etc/memcached.conf (размер кэша через -m 256). WordPress использует Memcached через плагин Memcached Object Cache. PHP-расширение: php-memcached (рекомендуется) или php-memcache (старое). Drupal нативно поддерживает Memcached как backend для кэша.
На что обращать внимание
Memcached по умолчанию слушает 127.0.0.1:11211. Никогда не открывай порт наружу без аутентификации — Memcached не имеет встроенной защиты доступа. TLS добавлен в v1.5.13 (2018), но требует явной настройки. Оптимальный размер кэша — 25–50% RAM сервера при mixed-нагрузке (PHP + MySQL + кэш). Для WordPress при выборе между Memcached и Redis предпочтительнее Redis: поддерживает очереди, Pub/Sub и персистентность при перезапуске.