Fornex
Европейский
хостинг

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

    file

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

    С помощью клиентской библиотеки (для C/C++, Ruby, Perl, PHP, Python, Java, .Net и др.) позволяет кэшировать данные в оперативной памяти множества доступных серверов. Распределение реализуется путём сегментирования данных по значению хэша ключа по аналогии с сокетами хэш-таблицы. Клиентская библиотека, используя ключ данных, вычисляет хэш и использует его для выбора соответствующего сервера. Ситуация сбоя сервера трактуется как промах кэша, что позволяет повышать отказоустойчивость комплекса за счет наращивания количества memcached серверов и возможности производить их горячую замену.

    В API memcached есть только базовые функции: выбор сервера, установка и разрыв соединения, добавление, удаление, обновление и получение объекта, а также Compare-and-swap. Для каждого объекта устанавливается время жизни, от 1 секунды до бесконечности. При исчерпании памяти более старые объекты автоматически удаляются. Для PHP также есть уже готовые библиотеки PECL для работы с memcached, которые дают дополнительную функциональность.

    Особенности Memcached:

    • Все данные хранятся в памяти для ускорения чтения-записи;
    • Максимальная длина ключа по умолчанию составляет 250 байт, а длина значения — 1 Мб;
    • Ключи можно «расширить», воспользовавшись каким-нибудь MD5 или SHA512 (в этом случае нехэшированный ключ будет разумно продублировать в значении);
    • Если хочется хранить очень длинные значения, можно сжимать их и/или разбивать на части;
    • Memcached использует алгоритм кэширования LRU;
    • Весь ввод-вывод осуществляется с помощью libevent;
    • Для ускорения работы память выделяется при запуске демона и не освобождается до его остановки;
    • Для борьбы с фрагментацией памяти используется slab allocator;
    • Все операции являются атомарными, есть поддержка compare-and-swap;
    • С Memcached можно работать по UDP;
    • Помимо текстового протокола также существует бинарный;
    • Написан на Си, распространяется под лицензией BSD;