kphp Posted August 13, 2020 Report Share Posted August 13, 2020 (edited) Автор OTTO https://github.com/OTTO11/memcache README.md Эмулятор Memcache для обычного хостинга Описание - все закешированные данные хранятся в файлах в json формате. Установка Методы Memcache::connect — Открывает соединение с memcached сервером Memcache::pconnect — Открывает постоянное соединение с memcached сервером Memcache::addServer — Добавить memcached сервер в пул соединений Memcache::add — Добавить значение Memcache::set — Установить значение Memcache::replace — Заменить значение Memcache::get — Получить значение Memcache::increment — Инкрементирует значение Memcache::decrement — Декрементирует значение Memcache::delete — Удалить значение Memcache::flush — Сбросить все существующие значения на сервере Memcache::close — Закрывает соединение с memcached сервером Установка Для установки на сайт достаточно создать папку cache в любом месте проекта и в файле memcache.php указать путь до папки. Так же там можно изменить название папки и расширение файлов. Для полноценной работы достаточно заинклюдить файл memcache.php в основном файле. После этого вы получите, поддержку стандартных функций memcache. Если же на сервере был ранее установлен memcache вы получите ошибку: Fatal error: Cannot redeclare "Название функции" in /path/to/memcache.php on line NUM Работа с memcache Memcache поддерживает два типа работы. - Процедурный стиль - Объектно Ориентированный Процедурный стиль ``` $connect = memcache_connect('localhost',11211); memcache_set($connect, 'key_set', array('value1','value2')); print_r(memcache_get($connect, 'key_set')); ``` Объектно Ориентированный ``` $cache = new Memcache; // так же можно указать Memcached $cache->connect('localhost',11211); $cache->set('key_set', array('value1','value2')); print_r($cache->get('key_set')); ``` При желании можно структурировать кеш. Разложив его по папкам. Делается это при помощи **^ (caret)** Например: $cache->set('dir^file', array('value1','value2')); Результат: cache/ dir/ file.tmp file.tmp.tmpTime Тем самым, можно легко понять структуру кеша и при переходе на обычный memcache, не придется ничего менять. Методы На самом деле все эти методы можно подразделить на 3 группы: - Работа со значениями - Работа с серверами и соединениями - Получение информации Работа со значениями Методы этой группы позволяют делать следующее: - Устанавливать значения - Удалять эти значения - Заменять эти значения - Обращаться к этим значения по ключу - Управлять сроком жизни значений + пара специфичных методов для инкремента и декремента целочисленных значений. Memcache::connect() Фейковая функция существует только для совместимости. bool Memcache::connect ( string $host [, int $port [, int $timeout ]] ) - **string $host** - Хост Memcached. - **int $port** - порт, на котором Memcached слушает соединения. - **int $timeout** - Лимит в секундах, для подключения к демону. Подумайте дважды, прежде чем изменять значение по умолчанию 1 секунда - вы можете потерять все преимущества кэширования, если ваше соединение будет происходить слишком долго. <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); ?> Memcache::pconnect() Фейковая функция существует только для совместимости. mixed Memcache::pconnect ( string $host [, int $port [, int $timeout ]] ) - **string $host** - Хост Memcached. Этот параметр может также указать другие транспорты, как unix:///path/to/memcached.sock т.е. использовать UNIX сокеты, в этом случае порт должен быть установлен в 0. - **int $port** - порт, на котором Memcached слушает соединения. Установите этот параметр в 0, если предполагается использование сокетов. - **int $timeout** - Лимит в секундах, для подключения к демону. Подумайте дважды, прежде чем изменять значение по умолчанию 1 секунда - вы можете потерять все преимущества кэширования, если ваше соединение будет происходить слишком долго. <?php $cache = new Memcache(); $cache->pconnect('localhost', 11211, 30); ?> Memcache::addServer() Фейковая функция существует только для совместимости. bool Memcache::addServer ( string $host [, int $port = 11211 [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, callable $failure_callback [, int $timeoutms ]]]]]]]] ) - **string $host** - Хост Memcached. Этот параметр может также указать другие транспорты, как unix:///path/to/memcached.sock т.е. использовать UNIX сокеты, в этом случае порт должен быть установлен в 0. - **int $port** - порт, на котором Memcached слушает соединения. Установите этот параметр в 0, если предполагается использование сокетов. - **bool $persistent** - Устанавливает использование постоянного соединения. По умолчанию в значение TRUE. - **int $weight** - Чем больше, тем вероятнее, что данный сервер будет выбран для хранения значений. Т.е. это своеобразный "вес" сервера в общем пуле, косвенно это ещё и предполагаемая нагрузка на сервер. - **int $timeout** - Лимит в секундах, для подключения к демону. Подумайте дважды, прежде чем изменять значение по умолчанию 1 секунда - вы можете потерять все преимущества кэширования, если ваше соединение будет происходить слишком долго. - **int $retry_interval** - Устанавливает, как часто отказавший сервер будет опрашиваться, значение по умолчанию составляет 15 секунд. Установка этого параметра в -1 отключает автоматический повтор запросов. - **bool $status** - Помечает сервер как ONLINE. Установка этого параметра в FALSE и retry_interval -1 позволяет отказавшему серверу хранится в пуле активных серверов, чтобы не влиять на ключевые алгоритмы распределения. Обращения к этому серверу будут распределятся между оставшимися доступными серверами. По умолчанию значение TRUE, то есть сервер должен рассматриваться как ONLINE. - **callable $failure_callback** - Позволяет пользователю указать функцию обратного вызова для запуска при обнаружении ошибки. Функция должна принимать два параметра, имя хоста и порт вышедшего из строя сервера. - **string $timeoutms** - не описана. Memcache::set() Memcache::add() Позволяют установить значение, задать сжатие и время жизни для этого значения. Единственное различие в поведении этих методов это то, что метод Memcache::add - вернёт FALSE, если значение с таким ключём уже установлена. bool Memcache::add ( string $key, mixed $var [, int $flag [, int $expire ]] ) bool Memcache::set ( string $key, mixed $var [, int $flag [, int $expire ]] ) - **string $key** - ключ значения, используя его мы оперируем значением. - **mixed $var** - значение. - **int $flag** - Флаг, указвающий, использовать ли сжатие в данном случае настоящего сжатия не производиться, так же можно использовать константы - **int $expire** - Время жизни значения(кэша). Если равно нулю, то бессрочно. Вы также можете использовать метку времени или количество секунд, начиная с текущего времени, но тогда число секунд, не может превышать 2592000 (30 дней). <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); $cache->add( 'myfirst', 1000, MEMCACHE_COMPRESSED, 15 ); $cache->set( 'mysecond', 2000, MEMCACHE_COMPRESSED, 15 ); ?> Memcache::replace() Перезаписать существующее значение. Memcache::replace() должна использоваться, чтобы заменить существующее значение. В случае, если значение с таким ключом не существует, Memcache::replace() возвращает FALSE. В остальном Memcache::replace() ведет себя так же, как и Memcache::set(). Также можно использовать функцию memcache_replace() string Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire ]] ) - **string $key** - ключ, значение которого нужно заменить. - **mixed $var** - новое значение. - **int $flag** - Флаг, указвающий, использовать ли сжатие (Здесь то и нужна Zlib) для сохраняемого значения, можно использовать константы - **int $expire** - Время жизни значения(кэша). Если равно нулю, то бессрочно. Вы также можете использовать метку времени или количество секунд, начиная с текущего времени, но тогда число секунд, не может превышать 2592000 (30 дней). <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); $cache->add( 'one', 111, 0, 15 ); $cache->add( 'two', 222, 0, 15 ); $cache->add( 'three', 333, 0, 15 ); $cache->replace( 'three', 777 ); print_r( $cache->get( array('one','two','three')) ); ?> Результат: Array ( [one] => 111 [two] => 222 [three] => 777 ) Memcache::get() Вернёт запрошенное значение или FALSE в случае неудачи, или, если значение с таким ключём ещё не установлено. Можно передать массив ключей значений, тогда Memcache::get тоже вернёт массив, он будет содержать найденные пары ключ-значение. string Memcache::get ( string $key [, int &$flags ] ) array Memcache::get ( array $keys [, array &$flags ] ) - **string $key** - ключ значения, или массив ключей, значения которых нужно получить. - **int $flag** - назначение этого параметра осталось для меня тайной. Я пробовал использовать некоторые целочисленные значения, но это не дало ни какого эффекта. Да и примеры в основном даны без его использования, из чего мною сделан вывод: можно прекрасно работать и без него :) <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); $cache->add( 'myfirst', 1000, MEMCACHE_COMPRESSED, 15 ); $cache->set( 'mysecond', 2000, MEMCACHE_COMPRESSED, 15 ); print_r( $cache->get( array('myfirst','mysecond')) ); ?> Результат: Array ( [myfirst] => 1000 [mysecond] => 2000 ) Memcache::increment() Увеличивает значение указанного ключа на указанное значение. Если значение указанного ключа не числовое и не может быть конвертировано в число, то оно изменит свое значение на значение, указанное как второй параметр. Memcache::increment() не создает элемент, если он еще не существует. int Memcache::increment ( string $key [, int $value = 1 ] ) - **string $key** - ключ, значение которого нужно инкрементировать. - **int $value** - значение инкремента. <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); $cache->set( 'someOne', 10, 0, 5 ); $cache->increment( 'someOne', 10, 0, 5 ); $cache->increment( 'someOne', 10, 0, 5 ); echo $cache->get('someOne');// выведет 30 ?> Memcache::decrement() Уменьшает значение указанного ключа на указанное значение. Аналогично Memcache::increment(), текущее значение элемента преобразуется в числовое и после этого уменьшается int Memcache::decrement ( string $key [, int $value = 1 ] ) - **string $key** - ключ, значение которого нужно декрементировать. - **int $value** - значение декремента. Memcache::delete() Удалить значение из кэша. Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. string Memcache::delete ( string $key [, int $timeout = 0 ] ) - **string $key** - ключ значение, которого нужно удалить. - **int $timeout** - Этот параметр так же устарел и не поддерживается, по умолчанию равен 0 секунд. Не используйте этот параметр. Memcache::flush() Memcache::flush() удаляет полностью все каталоги и файлы из папки cache bool Memcache::flush ( void ) Пример ниже не выведет ничего. ``` connect('localhost', 11211, 30); $cache->set( 'someOne', 111, 0, 5 ); $cache->set( 'someTwo', 222, 0, 5 ); $cache->set( 'someTree', 333, 0, 5 ); $cache->flush(); //Очистит кэш print_r( $cache->get( array('someOne','someTwo','someTree')) ); ?> <h3><a name="close">Memcache::close()</a></h3> <p>Фейковая функция существует только для совместимости. Также можно использовать функцию memcache_close().</p> <pre> bool <strong>Memcache::close</strong> ( void ) </pre> memcache.rar Edited August 13, 2020 by kphp Quote Link to comment
Семен Posted August 13, 2020 Report Share Posted August 13, 2020 @kphp в оригинале на гитхабе по понятнее. В этом коде OOP стиль нарушает srp, сразу не поймешь, что это файловый кеш. Использовать PSR-16 круто, переключаться с файлового кеша на мемкеш, редис просто. Quote Link to comment
Edward Nemirovskiy Posted August 26, 2020 Report Share Posted August 26, 2020 В 13.08.2020 в 16:33, kphp сказал: Автор OTTO https://github.com/OTTO11/memcache README.md Эмулятор Memcache для обычного хостинга Описание - все закешированные данные хранятся в файлах в json формате. Установка Методы Memcache::connect — Открывает соединение с memcached сервером Memcache::pconnect — Открывает постоянное соединение с memcached сервером Memcache::addServer — Добавить memcached сервер в пул соединений Memcache::add — Добавить значение Memcache::set — Установить значение Memcache::replace — Заменить значение Memcache::get — Получить значение Memcache::increment — Инкрементирует значение Memcache::decrement — Декрементирует значение Memcache::delete — Удалить значение Memcache::flush — Сбросить все существующие значения на сервере Memcache::close — Закрывает соединение с memcached сервером Установка Для установки на сайт достаточно создать папку cache в любом месте проекта и в файле memcache.php указать путь до папки. Так же там можно изменить название папки и расширение файлов. Для полноценной работы достаточно заинклюдить файл memcache.php в основном файле. После этого вы получите, поддержку стандартных функций memcache. Если же на сервере был ранее установлен memcache вы получите ошибку: Fatal error: Cannot redeclare "Название функции" in /path/to/memcache.php on line NUM Работа с memcache Memcache поддерживает два типа работы. - Процедурный стиль - Объектно Ориентированный Процедурный стиль ``` $connect = memcache_connect('localhost',11211); memcache_set($connect, 'key_set', array('value1','value2')); print_r(memcache_get($connect, 'key_set')); ``` Объектно Ориентированный ``` $cache = new Memcache; // так же можно указать Memcached $cache->connect('localhost',11211); $cache->set('key_set', array('value1','value2')); print_r($cache->get('key_set')); ``` При желании можно структурировать кеш. Разложив его по папкам. Делается это при помощи **^ (caret)** Например: $cache->set('dir^file', array('value1','value2')); Результат: cache/ dir/ file.tmp file.tmp.tmpTime Тем самым, можно легко понять структуру кеша и при переходе на обычный memcache, не придется ничего менять. Методы На самом деле все эти методы можно подразделить на 3 группы: - Работа со значениями - Работа с серверами и соединениями - Получение информации Работа со значениями Методы этой группы позволяют делать следующее: - Устанавливать значения - Удалять эти значения - Заменять эти значения - Обращаться к этим значения по ключу - Управлять сроком жизни значений + пара специфичных методов для инкремента и декремента целочисленных значений. Memcache::connect() Фейковая функция существует только для совместимости. bool Memcache::connect ( string $host [, int $port [, int $timeout ]] ) - **string $host** - Хост Memcached. - **int $port** - порт, на котором Memcached слушает соединения. - **int $timeout** - Лимит в секундах, для подключения к демону. Подумайте дважды, прежде чем изменять значение по умолчанию 1 секунда - вы можете потерять все преимущества кэширования, если ваше соединение будет происходить слишком долго. <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); ?> Memcache::pconnect() Фейковая функция существует только для совместимости. mixed Memcache::pconnect ( string $host [, int $port [, int $timeout ]] ) - **string $host** - Хост Memcached. Этот параметр может также указать другие транспорты, как unix:///path/to/memcached.sock т.е. использовать UNIX сокеты, в этом случае порт должен быть установлен в 0. - **int $port** - порт, на котором Memcached слушает соединения. Установите этот параметр в 0, если предполагается использование сокетов. - **int $timeout** - Лимит в секундах, для подключения к демону. Подумайте дважды, прежде чем изменять значение по умолчанию 1 секунда - вы можете потерять все преимущества кэширования, если ваше соединение будет происходить слишком долго. <?php $cache = new Memcache(); $cache->pconnect('localhost', 11211, 30); ?> Memcache::addServer() Фейковая функция существует только для совместимости. bool Memcache::addServer ( string $host [, int $port = 11211 [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, callable $failure_callback [, int $timeoutms ]]]]]]]] ) - **string $host** - Хост Memcached. Этот параметр может также указать другие транспорты, как unix:///path/to/memcached.sock т.е. использовать UNIX сокеты, в этом случае порт должен быть установлен в 0. - **int $port** - порт, на котором Memcached слушает соединения. Установите этот параметр в 0, если предполагается использование сокетов. - **bool $persistent** - Устанавливает использование постоянного соединения. По умолчанию в значение TRUE. - **int $weight** - Чем больше, тем вероятнее, что данный сервер будет выбран для хранения значений. Т.е. это своеобразный "вес" сервера в общем пуле, косвенно это ещё и предполагаемая нагрузка на сервер. - **int $timeout** - Лимит в секундах, для подключения к демону. Подумайте дважды, прежде чем изменять значение по умолчанию 1 секунда - вы можете потерять все преимущества кэширования, если ваше соединение будет происходить слишком долго. - **int $retry_interval** - Устанавливает, как часто отказавший сервер будет опрашиваться, значение по умолчанию составляет 15 секунд. Установка этого параметра в -1 отключает автоматический повтор запросов. - **bool $status** - Помечает сервер как ONLINE. Установка этого параметра в FALSE и retry_interval -1 позволяет отказавшему серверу хранится в пуле активных серверов, чтобы не влиять на ключевые алгоритмы распределения. Обращения к этому серверу будут распределятся между оставшимися доступными серверами. По умолчанию значение TRUE, то есть сервер должен рассматриваться как ONLINE. - **callable $failure_callback** - Позволяет пользователю указать функцию обратного вызова для запуска при обнаружении ошибки. Функция должна принимать два параметра, имя хоста и порт вышедшего из строя сервера. - **string $timeoutms** - не описана. Memcache::set() Memcache::add() Позволяют установить значение, задать сжатие и время жизни для этого значения. Единственное различие в поведении этих методов это то, что метод Memcache::add - вернёт FALSE, если значение с таким ключём уже установлена. bool Memcache::add ( string $key, mixed $var [, int $flag [, int $expire ]] ) bool Memcache::set ( string $key, mixed $var [, int $flag [, int $expire ]] ) - **string $key** - ключ значения, используя его мы оперируем значением. - **mixed $var** - значение. - **int $flag** - Флаг, указвающий, использовать ли сжатие в данном случае настоящего сжатия не производиться, так же можно использовать константы - **int $expire** - Время жизни значения(кэша). Если равно нулю, то бессрочно. Вы также можете использовать метку времени или количество секунд, начиная с текущего времени, но тогда число секунд, не может превышать 2592000 (30 дней). <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); $cache->add( 'myfirst', 1000, MEMCACHE_COMPRESSED, 15 ); $cache->set( 'mysecond', 2000, MEMCACHE_COMPRESSED, 15 ); ?> Memcache::replace() Перезаписать существующее значение. Memcache::replace() должна использоваться, чтобы заменить существующее значение. В случае, если значение с таким ключом не существует, Memcache::replace() возвращает FALSE. В остальном Memcache::replace() ведет себя так же, как и Memcache::set(). Также можно использовать функцию memcache_replace() string Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire ]] ) - **string $key** - ключ, значение которого нужно заменить. - **mixed $var** - новое значение. - **int $flag** - Флаг, указвающий, использовать ли сжатие (Здесь то и нужна Zlib) для сохраняемого значения, можно использовать константы - **int $expire** - Время жизни значения(кэша). Если равно нулю, то бессрочно. Вы также можете использовать метку времени или количество секунд, начиная с текущего времени, но тогда число секунд, не может превышать 2592000 (30 дней). <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); $cache->add( 'one', 111, 0, 15 ); $cache->add( 'two', 222, 0, 15 ); $cache->add( 'three', 333, 0, 15 ); $cache->replace( 'three', 777 ); print_r( $cache->get( array('one','two','three')) ); ?> Результат: Array ( [one] => 111 [two] => 222 [three] => 777 ) Memcache::get() Вернёт запрошенное значение или FALSE в случае неудачи, или, если значение с таким ключём ещё не установлено. Можно передать массив ключей значений, тогда Memcache::get тоже вернёт массив, он будет содержать найденные пары ключ-значение. string Memcache::get ( string $key [, int &$flags ] ) array Memcache::get ( array $keys [, array &$flags ] ) - **string $key** - ключ значения, или массив ключей, значения которых нужно получить. - **int $flag** - назначение этого параметра осталось для меня тайной. Я пробовал использовать некоторые целочисленные значения, но это не дало ни какого эффекта. Да и примеры в основном даны без его использования, из чего мною сделан вывод: можно прекрасно работать и без него :) <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); $cache->add( 'myfirst', 1000, MEMCACHE_COMPRESSED, 15 ); $cache->set( 'mysecond', 2000, MEMCACHE_COMPRESSED, 15 ); print_r( $cache->get( array('myfirst','mysecond')) ); ?> Результат: Array ( [myfirst] => 1000 [mysecond] => 2000 ) Memcache::increment() Увеличивает значение указанного ключа на указанное значение. Если значение указанного ключа не числовое и не может быть конвертировано в число, то оно изменит свое значение на значение, указанное как второй параметр. Memcache::increment() не создает элемент, если он еще не существует. int Memcache::increment ( string $key [, int $value = 1 ] ) - **string $key** - ключ, значение которого нужно инкрементировать. - **int $value** - значение инкремента. <?php $cache = new Memcache(); $cache->connect('localhost', 11211, 30); $cache->set( 'someOne', 10, 0, 5 ); $cache->increment( 'someOne', 10, 0, 5 ); $cache->increment( 'someOne', 10, 0, 5 ); echo $cache->get('someOne');// выведет 30 ?> Memcache::decrement() Уменьшает значение указанного ключа на указанное значение. Аналогично Memcache::increment(), текущее значение элемента преобразуется в числовое и после этого уменьшается int Memcache::decrement ( string $key [, int $value = 1 ] ) - **string $key** - ключ, значение которого нужно декрементировать. - **int $value** - значение декремента. Memcache::delete() Удалить значение из кэша. Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. string Memcache::delete ( string $key [, int $timeout = 0 ] ) - **string $key** - ключ значение, которого нужно удалить. - **int $timeout** - Этот параметр так же устарел и не поддерживается, по умолчанию равен 0 секунд. Не используйте этот параметр. Memcache::flush() Memcache::flush() удаляет полностью все каталоги и файлы из папки cache bool Memcache::flush ( void ) Пример ниже не выведет ничего. ``` connect('localhost', 11211, 30); $cache->set( 'someOne', 111, 0, 5 ); $cache->set( 'someTwo', 222, 0, 5 ); $cache->set( 'someTree', 333, 0, 5 ); $cache->flush(); //Очистит кэш print_r( $cache->get( array('someOne','someTwo','someTree')) ); ?> <h3><a name="close">Memcache::close()</a></h3> <p>Фейковая функция существует только для совместимости. Также можно использовать функцию memcache_close().</p> <pre> bool <strong>Memcache::close</strong> ( void ) </pre> memcache.rar 1 6 кБ Если на хостинге не включен модуль мемкеша в php, то этот скрипт бесполезен new Memcache(); Quote Link to comment
Семен Posted August 26, 2020 Report Share Posted August 26, 2020 @Edward Nemirovskiy Почему скрипт бесполезен, если в файле memcache.php есть класс Memcache? Если честно - скрипт помойка, так нельзя писать код. Quote Link to comment
viiprogrammer Posted October 5, 2020 Report Share Posted October 5, 2020 А смысл... сейчас за 80р вирутальный хотинг с Memcache и SSH, тот же Fornex Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.