Сразу скажу, у меня отключены глобальные переменные в htacess, не знаю есть ли связь с моим примером и данной настройкой.
global $qcache;
if(empty($qcache)){
$result = mysql_query("select * from menu");
echo 'empty cache';
$qcache = $result;
}else{
echo 'cache full';
}
while($row = mysql_fetch_array($qcache)){
echo $row['id'];
}
Хотя чувствую чушь получилась, особенно тут $row = mysql_fetch_array($qcache)
Спустя 31 минута, 55 секунд (4.07.2011 - 15:16) tatti написал(а):
похоже на салат. действительно чушь.
первое, что бросается в глаза - при обновлении глобальные переменные тоже обновляются(вы видимо не заметили).
первое, что бросается в глаза - при обновлении глобальные переменные тоже обновляются(вы видимо не заметили).
Спустя 11 минут, 8 секунд (4.07.2011 - 15:28) maximka787 написал(а):
Раньше я кэшировал просто сессионный переменные,
но:
1. Боюсь сессионные переменные намного тяжелее обычных глобальных.
2. Там одно число, а я хочу использовать массив.
мне надо загнать самый популярные товары на главной в кэш, тк они вообще не обновляются, а обращений к главной много, смысл напрягать сервак.
session_start();это пример вкратце.
if(!isset($_SESSION['count_users'])){
$result = mysql_query("select * from users");
$row = mysql_fetch_array($result)
$_SESSION['count_users'] == $row['count'];
}
echo 'Всего пользователей '.$_SESSION['count_users'];
но:
1. Боюсь сессионные переменные намного тяжелее обычных глобальных.
2. Там одно число, а я хочу использовать массив.
мне надо загнать самый популярные товары на главной в кэш, тк они вообще не обновляются, а обращений к главной много, смысл напрягать сервак.
Спустя 52 секунды (4.07.2011 - 15:28) linker написал(а):
Конечно чушь. Обычно кэшируют готовый HTML-контент.
Спустя 46 секунд (4.07.2011 - 15:29) maximka787 написал(а):
Цитата |
мне надо загнать самый популярные товары на главной в кэш, тк они вообще не обновляются, а обращений к главной много, смысл напрягать сервак. |
я имею ввиду кэш в рамках одного пользователя, а не на самом сервере
Спустя 2 минуты, 11 секунд (4.07.2011 - 15:31) maximka787 написал(а):
linker
все равно, я могу мой контент загнать в ячейку базы данных, но выводить то эту запись все равно надо каждый раз. я и имею ввиду именно чтобы обращение к БД было один раз вначале .
все равно, я могу мой контент загнать в ячейку базы данных, но выводить то эту запись все равно надо каждый раз. я и имею ввиду именно чтобы обращение к БД было один раз вначале .
Спустя 2 минуты, 47 секунд (4.07.2011 - 15:34) tatti написал(а):
жми сюда
Спустя 15 минут, 28 секунд (4.07.2011 - 15:50) linker написал(а):
Когда есть кэш готового HTML, то вообще ничего не надо делать, достаточно будет просто написать
echo $cache_html_content;.
Спустя 9 минут, 8 секунд (4.07.2011 - 15:59) maximka787 написал(а):
linker
а тут не грамотно написал? суть в том что я просто хочу чтобы sql запрос сработал только один раз. в примере ниже я это сделал, но не уверен что это лучшее решение. Т.е по сути мне понять как вот это механизм сработает, а дальше я сам наворочу сложности.
а тут не грамотно написал? суть в том что я просто хочу чтобы sql запрос сработал только один раз. в примере ниже я это сделал, но не уверен что это лучшее решение. Т.е по сути мне понять как вот это механизм сработает, а дальше я сам наворочу сложности.
session_start();
if(!isset($_SESSION['count_users'])){
$result = mysql_query("select * from users"); // AS count
$row = mysql_fetch_array($result)
$_SESSION['count_users'] == $row['count'];
}
echo 'Всего пользователей '.$_SESSION['count_users'];
Спустя 8 минут, 16 секунд (4.07.2011 - 16:07) linker написал(а):
Тут
$_SESSION['count_users'] = $row['count'];А если за это время добавится еще пользователь или несколько? Данные будут устаревшие. Кэш нужен там, где нагрузка начинает приближаться или переваливать за возможности сервера. Сессии по умолчанию настроены на файлы, в случае такого кэша, прогиб по ИОПСам обеспечен. Читай в сторону memcache.
Спустя 7 минут, 17 секунд (4.07.2011 - 16:14) maximka787 написал(а):
linker
Цитата |
Сессии по умолчанию настроены на файлы |
тоесть сессионные файлы еще на сервере хранятся?
И еще такой момент, если например мой скрипт выводит результат в среднем за 0,008 секунд из 4х таблиц, то по сути это как минимум 125 одновременных нажатий выдержит при одновременном обновлении?
Если так то для моей системы это много даже значит можно вообще не бояться?
Просто хотел главную страницу сделать по примеру статичной, но почитав про то что результат кэша храниться в файлах, понял что это врятли спасет, тк нагрузка на дисковую подсистему намного опасней чем на ОЗУ. На счет memcache наверно лучше всего смотреть.
И еще такой момент, если например мой скрипт выводит результат в среднем за 0,008 секунд из 4х таблиц, то по сути это как минимум 125 одновременных нажатий выдержит при одновременном обновлении?
Если так то для моей системы это много даже значит можно вообще не бояться?
Просто хотел главную страницу сделать по примеру статичной, но почитав про то что результат кэша храниться в файлах, понял что это врятли спасет, тк нагрузка на дисковую подсистему намного опасней чем на ОЗУ. На счет memcache наверно лучше всего смотреть.
Спустя 10 минут, 31 секунда (4.07.2011 - 16:25) waldicom написал(а):
Цитата (linker @ 4.07.2011 - 14:07) |
прогиб по ИОПСам обеспечен |
а ИОПСы это чуго? А то поиск по гуглу ничего не дал вразумительного? Что-то в сторону системы ввода/вывода?
Спустя 3 минуты, 44 секунды (4.07.2011 - 16:29) maximka787 написал(а):
waldicom
мне дал, это теория про структуры как я понял. можно сказать проблема обработке данных в самом сервере
мне дал, это теория про структуры как я понял. можно сказать проблема обработке данных в самом сервере
Спустя 2 минуты, 23 секунды (4.07.2011 - 16:31) linker написал(а):
waldicom
Да, IOPS - Input Output Per Seconds.
maximka787
Суть кэша в том, чтобы для всех 100, 1000, миллиона пользователей показать только один закэшированный контент. Объясню, сессии принадлежат конкретному пользователю, следовательно, если в один момент времени зайдут тысяча пользователей, то будет выполнено тысяча запросов и сохранена тысяча результатов. Суть кэша в том, чтобы в данной ситуации выполнился минимум 1 запрос, сохранился минимум один результат, но отобразился он для всей тысячной аравы пользователей.
Вобщем думай.
Да, IOPS - Input Output Per Seconds.
maximka787
Суть кэша в том, чтобы для всех 100, 1000, миллиона пользователей показать только один закэшированный контент. Объясню, сессии принадлежат конкретному пользователю, следовательно, если в один момент времени зайдут тысяча пользователей, то будет выполнено тысяча запросов и сохранена тысяча результатов. Суть кэша в том, чтобы в данной ситуации выполнился минимум 1 запрос, сохранился минимум один результат, но отобразился он для всей тысячной аравы пользователей.
Вобщем думай.
Спустя 1 минута, 1 секунда (4.07.2011 - 16:32) waldicom написал(а):
Цитата (maximka787 @ 4.07.2011 - 14:29) |
это теория про структуры как я понял. можно сказать проблема обработке данных в самом сервере |
Это получается будет прогиб по структурам обработки данных в самом сервере? хм... понятнее не стало, подождем linker'а.
Спустя 34 секунды (4.07.2011 - 16:33) waldicom написал(а):
Цитата (linker @ 4.07.2011 - 14:31) |
Да, IOPS - Input Output Per Seconds. |
Ага, спасиб!
Спустя 4 минуты, 3 секунды (4.07.2011 - 16:37) maximka787 написал(а):
linker
гениально, жаль хостер не дает использовать memcached. спасибо, в целом все понятно.
гениально, жаль хостер не дает использовать memcached. спасибо, в целом все понятно.
Спустя 4 минуты, 19 секунд (4.07.2011 - 16:41) linker написал(а):
maximka787
Ну для начала можно попробовать реализовать это дело на файлах. Ну и не забываем производить оптимизацию как кода, так и sql-запросов.
Ну для начала можно попробовать реализовать это дело на файлах. Ну и не забываем производить оптимизацию как кода, так и sql-запросов.
Спустя 1 день, 15 часов, 53 минуты, 24 секунды (6.07.2011 - 08:34) ExpJ написал(а):
Глобальные переменные - это зло не используйте их!
Лучше пользоваться готовым фреймворком, например Zend Framework, там есть готовая и удобная компонента Zend_Cache. Есть фронтэнды (вы можете кешировать работу функций, методов, целых страниц вашего сайта ...) и бекенды (для хранения кеша можно использовать базу, файлы, memcached)
Лучше пользоваться готовым фреймворком, например Zend Framework, там есть готовая и удобная компонента Zend_Cache. Есть фронтэнды (вы можете кешировать работу функций, методов, целых страниц вашего сайта ...) и бекенды (для хранения кеша можно использовать базу, файлы, memcached)
Спустя 7 дней, 2 часа, 37 минут, 39 секунд (13.07.2011 - 11:12) maximka787 написал(а):
Ребят, дошли руки до кеширования. Вот создал скрипт, который будет либо брать готовый файл, либо обновлять принудительно данные если они изменились. Посмотрите, имеет ли он недостатки какие?
$file_cache1 = '2.cache';
if (file_exists($file_cache1)){
echo '<p>Найден кэш файл</p>';
readfile($file_cache1);
} else{
echo '<p>кэш файла нет, создаем</p>';
ob_start();
?>
<table>
<tr>
<td>1</td>
</tr>
</table>
<?
// Получаем содержимое буфера
$buffer = ob_get_contents();
// Останавливаем буферизацию и очищаем буфер вывода
ob_end_clean();
// Сохранение кэш-файла с контентом
$fp = fopen($file_cache1, 'w');
fwrite($fp, $buffer);
fclose($fp);
}
_____________
..Работает - не трогай!