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

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

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

По умолчанию memcached использует порт 11211.


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

Класс Memcached представляет соединение к набору серверов memcached:

Memcached {
    public __construct ( string $persistent_id = ? )
    public add ( string $key , mixed $value , int $expiration = ? ) : bool
    public addByKey ( string $server_key , string $key , mixed $value , int $expiration = ? ) : bool
    public addServer ( string $host , int $port , int $weight = 0 ) : bool
    public addServers ( array $servers ) : bool
    public append ( string $key , string $value ) : bool
    public appendByKey ( string $server_key , string $key , string $value ) : bool
    public cas ( float $cas_token , string $key , mixed $value , int $expiration = ? ) : bool
    public casByKey ( float $cas_token , string $server_key , string $key , mixed $value , int $expiration = ? ) : bool
    public decrement ( string $key , int $offset = 1 , int $initial_value = 0 , int $expiry = 0 ) : int|false
    public decrementByKey ( string $server_key , string $key , int $offset = 1 , int $initial_value = 0 , int $expiry = 0 ) : int|false
    public delete ( string $key , int $time = 0 ) : bool
    public deleteByKey ( string $server_key , string $key , int $time = 0 ) : bool
    public deleteMulti ( array $keys , int $time = 0 ) : array
    public deleteMultiByKey ( string $server_key , array $keys , int $time = 0 ) : bool
    public fetch ( ) : array
    public fetchAll ( ) : array|false
    public flush ( int $delay = 0 ) : bool
    public get ( string $key , callable $cache_cb = ? , int $$flags = ? ) : mixed
    public getAllKeys ( ) : array|false
    public getByKey ( string $server_key , string $key , callable $cache_cb = ? , int $flags = ? ) : mixed
    public getDelayed ( array $keys , bool $with_cas = ? , callable $value_cb = ? ) : bool
    public getDelayedByKey ( string $server_key , array $keys , bool $with_cas = ? , callable $value_cb = ? ) : bool
    public getMulti ( array $keys , int $flags = ? ) : mixed
    public getMultiByKey ( string $server_key , array $keys , int $flags = ? ) : array|false
    public getOption ( int $option ) : mixed
    public getResultCode ( ) : int
    public getResultMessage ( ) : string
    public getServerByKey ( string $server_key ) : array
    public getServerList ( ) : array
    public getStats ( ) : array|false
    public getVersion ( ) : array
    public increment ( string $key , int $offset = 1 , int $initial_value = 0 , int $expiry = 0 ) : int|false
    public incrementByKey ( string $server_key , string $key , int $offset = 1 , int $initial_value = 0 , int $expiry = 0 ) : int|false
    public isPersistent ( ) : bool
    public isPristine ( ) : bool
    public prepend ( string $key , string $value ) : bool
    public prependByKey ( string $server_key , string $key , string $value ) : bool
    public quit ( ) : bool
    public replace ( string $key , mixed $value , int $expiration = ? ) : bool
    public replaceByKey ( string $server_key , string $key , mixed $value , int $expiration = ? ) : bool
    public resetServerList ( ) : bool
    public set ( string $key , mixed $value , int $expiration = ? ) : bool
    public setByKey ( string $server_key , string $key , mixed $value , int $expiration = ? ) : bool
    public setMulti ( array $items , int $expiration = ? ) : bool
    public setMultiByKey ( string $server_key , array $items , int $expiration = ? ) : bool
    public setOption ( int $option , mixed $value ) : bool
    public setOptions ( array $options ) : bool
    public setSaslAuthData ( string $username , string $password ) : void
    public touch ( string $key , int $expiration ) : bool
    public touchByKey ( string $server_key , string $key , int $expiration ) : bool
}

Модуль Memcache предоставляет удобный процедурный и объектно-ориентированный интерфейс к memcached, высокоэффективному кеширующему демону, который был специально разработан для снижения нагрузки на базу данных в динамических веб приложениях.

Memcache {
    add ( string $key , mixed $var , int $flag = ? , int $expire = ? ) : bool
    addServer ( string $host , int $port = 11211 , bool $persistent = ? , int $weight = ? , int $timeout = ? , int $retry_interval = ? , bool $status = ? , callable $failure_callback = ? , int $timeoutms = ? ) : bool
    close ( ) : bool
    connect ( string $host , int $port = ? , int $timeout = ? ) : bool
    decrement ( string $key , int $value = 1 ) : int|false
    delete ( string $key , int $timeout = 0 ) : bool
    flush ( ) : bool
    get ( string $key , int &$flags = ? ) : string
    getExtendedStats ( string $type = ? , int $slabid = ? , int $limit = 100 ) : array
    getServerStatus ( string $host , int $port = 11211 ) : int
    getStats ( string $type = ? , int $slabid = ? , int $limit = 100 ) : array|false
    getVersion ( ) : string|false
    increment ( string $key , int $value = 1 ) : int|false
    pconnect ( string $host , int $port = ? , int $timeout = ? ) : mixed
    replace ( string $key , mixed $var , int $flag = ? , int $expire = ? ) : bool
    set ( string $key , mixed $var , int $flag = ? , int $expire = ? ) : bool
    setCompressThreshold ( int $threshold , float $min_savings = ? ) : bool
    setServerParams ( string $host , int $port = 11211 , int $timeout = ? , int $retry_interval = false , bool $status = ? , callable $failure_callback = ? ) : bool
}