Memcached
Развертывание популярных приложений, на наших высокопроизводительных облачных серверах, одним нажатием кнопки.
Memcached — программное обеспечение, реализующее сервис кэширования данных в оперативной памяти на основе хеш-таблицы.
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.