kphp Опубликовано 13 августа, 2020 Жалоба Поделиться Опубликовано 13 августа, 2020 (изменено) Автор 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 Изменено 13 августа, 2020 пользователем kphp Ссылка на комментарий
Семен Опубликовано 13 августа, 2020 Жалоба Поделиться Опубликовано 13 августа, 2020 @kphp в оригинале на гитхабе по понятнее. В этом коде OOP стиль нарушает srp, сразу не поймешь, что это файловый кеш. Использовать PSR-16 круто, переключаться с файлового кеша на мемкеш, редис просто. Ссылка на комментарий
Edward Nemirovskiy Опубликовано 26 августа, 2020 Жалоба Поделиться Опубликовано 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(); Ссылка на комментарий
Семен Опубликовано 26 августа, 2020 Жалоба Поделиться Опубликовано 26 августа, 2020 @Edward Nemirovskiy Почему скрипт бесполезен, если в файле memcache.php есть класс Memcache? Если честно - скрипт помойка, так нельзя писать код. Ссылка на комментарий
viiprogrammer Опубликовано 5 октября, 2020 Жалоба Поделиться Опубликовано 5 октября, 2020 А смысл... сейчас за 80р вирутальный хотинг с Memcache и SSH, тот же Fornex Ссылка на комментарий
Рекомендуемые сообщения