Ускоряем работу сайта при помощи кеширования на базе Memcached

Memcached — это хранилище «ключ => значение», использование которого очень эффективно для ускорения работы сайта или веб-приложения.

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

Для серверного кеширования Memcached подходит очень хорошо — кешировать можно как промежуточные данные (в сериализованном виде), так и данные, которые непосредственно «отдаются» пользователям — фрагменты страниц или даже страницы целиком. В случае кеширования страниц целиком, как правило, проще реализовать отдачу подобного рода статики на уровне веб-сервера, однако если нагрузка на дисковую подсистему высока, то стоит помнить, что Memcached может напрямую работать с веб-сервером (для nginx, например, есть соответствующий модуль), что позволяет на уровне бекенда писать данные в кеш, а получать этот кеш можно непосредственно веб-сервером без обращения к бекенду.

В API memcached есть только базовые функции — это выбор сервера, установка и разрыв соединений, добавление, удаление, обновление и получение значения по заданному ключу.

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

Для работы с Memcached есть готовые библиотеки, написанные для работы с языками программирования C, C++, C#, Ruby, Perl, PHP, Python, Java и с другими. Некоторые CMS имеют в своём составе модули кеширования, которые могут работать с Memcached, если данный сервис запущен на сервере.