memcached представляет собой высокопроизводительную распределенную систему кэширования объектов в оперативной памяти.
Оформлена она в виде классического daemon'а, слушающего подключения на одном из TCP-портов (по-умолчанию: 11211). Работа же с ним осуществляется с помощью клиентских библиотек, доступных практически для всех популярных языков программирования.
memcached не использует конфигурационные файлы, но все же может быть в какой-то степени настроен под свои нужды с помощью параметров, указываемых при запуске daemon'а, и переменных окружения. Например, часто используется параметр -m, позволяющий указать объем используемой для хранения объектов оперативной памяти. По сути кэширование с помощью memcached представляет собой некое подобие глобального ассоциативного массива, то есть набора соответствий ключ → объект.
Как же оно работает?
Принцип очень прост: после установления соединения между клиентом (произвольное приложение, воспользовавшееся услугами одной из клиентских библиотек) и сервером (распределенной системой, состоящей из daemon'ов), клиенту предоставляется возможность выполнять четыре примитивных действия для организации кэширования:
- set - установить соответствие между ключом и указанным объектом;
- add - аналогично set, но только при условии, что объекта с таким ключом в кэше нет;
- replace - абсолютная противоположность add, выполняется только если такой объект в кэше есть;
- get - получить объект из кэша по указанному ключу.
Вывод напрашивается лишь один: проще не придумаешь.
В сравнении
Многие СУБД предоставляют встроенные средства кэширования, но на практике они умеют кэшировать только результаты запросов, что не всегда является именно тем, что необходимо веб-приложению. СУБД обычно полностью очищают кэш таблицы при каждом изменении данных, что приводит к полной его бесполезности при активном обновлении таблиц.
Еще один альтернативный вариант кэширования может предоставить http-сервер, в большинстве случаев кэш дублируется несколько раз для каждого процесса PHP, Perl или любого другого используемого языка программирования. Помимо излишних затрат оперативной памяти, такой вариант развития событий еще и снижает эффективность самого кэша.
На практике
Использование memcached на практике в написании приложений ничуть не сложнее, чем в теории. Например, если говорить о PHP, то для доступа к daemon'y достаточно установить соответствующий PECL extension, который предоставит класс Memcached. С помощью его методов осуществляется доступ ко всем возможностям memcached, о которых я уже упоминал: connect, set, add, get и так далее.
Для многих других языков программирования также существуют API, список которых можно найти на официальном сайте.
О чем не стоит забывать
Кэш не является базой данных! Не стоит забывать, что кэш является очень ненадежным местом хранения данных, не предоставляет избыточности и каких-либо гарантий, что сохраненная в нем информация будет доступна через какое-то время. За производительность приходится платить.
В заключении
...хотелось бы сказать, что эта технология является очень производительным и эффективным решением вопроса кэширования для масштабных интернет-проектов. Возможности по ее применению не ограничиваются Сетью, ведь она реализована в виде обычного daemon'а, что открывает ее для всего спектра программного обеспечения, так или иначе следующего "Unix way".