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 }