kodges
Создатель
- Регистрация
- 16 Фев 2007
- Сообщения
- 32
- Реакции
- 28
А теперь товарищи самое интересное и вкусное )))
Новый вариант кеширования с использованием memcached.
Про то как устанавливать memcached на сервере и библиотеку для его работы с php я писать не буду. Вам достаточно обратиться к вашему хостинг провайдеру и вам его установят. А тот кто сам администрирует свои сервера тот и сам знает как его ставить Там все делается за пару секунд...
Я расскажу непосредственно о том как этот самый memcached использовать с пользой для вашего сервера, приминительно непосредственно к движку DLE (любой версии).
Единственное скажу что необходимо выделить оперативки для memcached примерно 3 четверти от того сколько занимало у вас файловое кеширование. То есть если файловый кеш скажем со сроком жизни 3 часа занимал у вас 200 мегабайт, то для memcached выделите 150 мегабайт памяти.
Итак начнем...
1. Открываем index.php, находим:
Вставляем выше:
Находим:
Вставляем выше:
3600*2 это время жизни кеша, 3600 секунды это 1 час, умножаем 3600 на 2 получается время жизни 2 часа.
2. Всё! Наслаждаемся процессом.
Немного о плюсах и минусах данного способа кеширования. Ну во первых, кеширование похоже на файловое, показанное мною несколькими постами выше.
Плюсы.
1. Еще более быстрый ответ сервера, так как все данные кеша хранятся в оперативной памяти.
2. Никакой нагрузки на HDD. (Меньше износ, больше проживет)
3. Кеш занимает меньше места, так как он сжимается средствами memcached.
4. Как вы могли заметить, я не привел ничего для удаления устаревшего кеша. А все потому что как только время его жизни устаревает в памяти, память занимаемая старым кешем высвобождается сама.
Минусы.
1. Необходимо чтобы у вас было нужное количество оперативки.
2. Если на сервере несколько сайтов, и все они используют данный вид кеширования, то при очистке кеша, удаляется кеш для всех сайтов. То есть невозможно удалить весь кеш только для одного конкретного сайта. С оперативкой такие фокусы не проходят. Либо все либо ничего... Но меня этот факт не сильно напрягает.
3. Больше минусов не вижу
Да кстати, для того чтобы очистить весь кеш в памяти, необходимо запустить такой вот скрипт:
После выполнения этого скрипта, ОЗУ не очищается моментально, но весь кеш в памяти помечается как устаревший, а система потом сама высвобождает память по мере необходимости.
Немного статистики...
Если файловое кеширование у меня занимало примерно 300 мегабайт на HDD, то memcached кеширование занимает всего 150 мегабайт памяти.
Если не использовать кеширование вообще, то есть использовать только родное DLE'шное, то MySQL жрал у меня 50% CPU на сервере при посещаемости 100 тыс уников в сутки. А с использованием кеширования будь то файловое или memcached, MySQL жрет не более 10% CPU. Сказка не правда ли? При всем при этом я использую время жизни кеша всего 2 часа.
Ну и на последок... Для оценки эффективности работы memcached можно использовать скрипт приведенный во вложении.
Юзайте на здоровье
Новый вариант кеширования с использованием memcached.
Про то как устанавливать memcached на сервере и библиотеку для его работы с php я писать не буду. Вам достаточно обратиться к вашему хостинг провайдеру и вам его установят. А тот кто сам администрирует свои сервера тот и сам знает как его ставить Там все делается за пару секунд...
Я расскажу непосредственно о том как этот самый memcached использовать с пользой для вашего сервера, приминительно непосредственно к движку DLE (любой версии).
Единственное скажу что необходимо выделить оперативки для memcached примерно 3 четверти от того сколько занимало у вас файловое кеширование. То есть если файловый кеш скажем со сроком жизни 3 часа занимал у вас 200 мегабайт, то для memcached выделите 150 мегабайт памяти.
Итак начнем...
1. Открываем index.php, находим:
PHP:
define ( 'DATALIFEENGINE', true );
PHP:
////////////////////////////////Кеширование в Memcached ///////////////////////////////////////////
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
{
$memcache = memcache_connect( 'localhost', 11211 );
$memkey = md5( $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] );
$mempage = memcache_get( $memcache, $memkey );
if( $mempage ) exit( $mempage );
}
///////////////////////////////////////////////////////////////////////////////////////////////////
Находим:
PHP:
GzipOut ();
PHP:
////////////////////////////////Кеширование в Memcached ///////////////////////////////////////////
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
{
memcache_set( $memcache, $memkey, ob_get_contents(), MEMCACHE_COMPRESSED, 3600*2 );
memcache_close( $memcache );
}
///////////////////////////////////////////////////////////////////////////////////////////////////
3600*2 это время жизни кеша, 3600 секунды это 1 час, умножаем 3600 на 2 получается время жизни 2 часа.
2. Всё! Наслаждаемся процессом.
Немного о плюсах и минусах данного способа кеширования. Ну во первых, кеширование похоже на файловое, показанное мною несколькими постами выше.
Плюсы.
1. Еще более быстрый ответ сервера, так как все данные кеша хранятся в оперативной памяти.
2. Никакой нагрузки на HDD. (Меньше износ, больше проживет)
3. Кеш занимает меньше места, так как он сжимается средствами memcached.
4. Как вы могли заметить, я не привел ничего для удаления устаревшего кеша. А все потому что как только время его жизни устаревает в памяти, память занимаемая старым кешем высвобождается сама.
Минусы.
1. Необходимо чтобы у вас было нужное количество оперативки.
2. Если на сервере несколько сайтов, и все они используют данный вид кеширования, то при очистке кеша, удаляется кеш для всех сайтов. То есть невозможно удалить весь кеш только для одного конкретного сайта. С оперативкой такие фокусы не проходят. Либо все либо ничего... Но меня этот факт не сильно напрягает.
3. Больше минусов не вижу
Да кстати, для того чтобы очистить весь кеш в памяти, необходимо запустить такой вот скрипт:
PHP:
<?php
$memcache = memcache_connect( 'localhost', 11211 );
memcache_flush( $memcache );
memcache_close( $memcache );
?>
Немного статистики...
Если файловое кеширование у меня занимало примерно 300 мегабайт на HDD, то memcached кеширование занимает всего 150 мегабайт памяти.
Если не использовать кеширование вообще, то есть использовать только родное DLE'шное, то MySQL жрал у меня 50% CPU на сервере при посещаемости 100 тыс уников в сутки. А с использованием кеширования будь то файловое или memcached, MySQL жрет не более 10% CPU. Сказка не правда ли? При всем при этом я использую время жизни кеша всего 2 часа.
Ну и на последок... Для оценки эффективности работы memcached можно использовать скрипт приведенный во вложении.
Юзайте на здоровье