Функции кеша: (запись \ чтение) Код (PHP): function create_cache($prefix, $cache_text) { $filename = ENGINE_DIR.'/cache/'.$prefix.'.tmp'; $fp = fopen($filename, 'wb+'); fwrite($fp, $cache_text); fclose($fp); @chmod($filename, 0666); } function view_cache($prefix) { $filename = ENGINE_DIR.'/cache/'.$prefix.'.tmp'; return @file_get_contents($filename); } + serilize / unserialize Такой штукой кеширую блоки у пользователей сайта (информацию и прочее). Возможно ли закешировать постраничную навигацию? Например вытаскиваю все фотографии или же аудиозаписи постранично. Пример кеширования данных пользователя: Код (PHP): $id = intval($_GET['id']); //ID пользователя $row = unserialize(view_cache('profile_'.$id)); //Смотрим кэш if(!$row){ //Проверяем на наличие кеша, если нету то выводи из БД и создаём его $row = $db->super_query("SELECT * FROM `users` WHERE `user_id` = '".$id."'"); if($row){ create_cache('profile_'.$id, serialize($row)); // Создаём кеш } } else { //Кеш есть - вытаскиваю echo $row['user_login']; } PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Кешировать всё что угодно можно. Для результатов запроса я бы брал в качестве ключа md5 запроса. Вроде же это у вас dle, а там можно кучу примеров найти кеширования всего запроса. Или вы решили свою систему кеша написать поверх стандартной? Функции кеширования не узнаю, а вот super_query - точно оттуда
Это не дле, классы оттуда. Можно конечно не md5 взять а serialize. $cache = serialize($row); При постраничной навигации берём же через LIMIT N, Z; И имя файла сделать к примеру cache_N_Z.dat Не поплывёт ли пагинация (вывод всех строк постранично) при новых записях если так сделать?
Не, вы меня не поняли. Всё очень просто. Вот у вас есть запрос "select .... from .... limit 2, 10" - вот всё вот это вы превращаете в ключ кеша, через md5, к примеру.
1. Если я правильно понял, то: Код (PHP): $sql = "SELECT ... LIMIT 2,10"; $key = md5($key); $row = $db->quper_query($sql); if($row){ //Пляшем с бубнами дальше.. } 2. Не поплывёт ли пагинация (вывод всех строк постранично) при новых записях если так сделать? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Просто у меня форум и я думаю как это правильно организовать. И стоит ли вообще кешировать. :: Получается, если 100 страниц в базе - 99 из них мы предположим закешировали, при новом сообщении стирается весь кеш из 100 страниц и рисуется новый, на генерируюмую страницу т.е последнюю. (если я правильно понял).. Смысл тогда в этом кеше? Или я что-то не так понял, поправьте меня, если это так. Просто я не знаю, как организована кеш система на остальных форумах (Если есть примеры из теории - было бы здорово)
Смысл в том, что запрашиваются страницы из базы чаще, чем появляются новые обычно. Поэтому прирост производительности кеш всё равно даст. Любое изменение базы данных - это повод стереть кеш. А стирать ли весь, или какой-то определённый - это уже как организуете. Там можно много вариантов придумать.
да сто́ит. это уж как ты заложишь. упрощенно: что ты объявишь ключём кеша, то и будет стираться — либо одна страница, либо сразу пучёк. на остальных форумах она фигово организована есть повод отличиться. рекомендую изучить https://github.com/php-fig/fig-standards/blob/master/proposed/cache.md http://www.stashphp.com/ хотябы для того, чтобы знать термины