Как лучше закешировать?

Тема в разделе "PHP Pro", создана пользователем new_forward, 3 янв 2011.

Статус темы:
Закрыта.
  1. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Доброго времени суток!

    Сделал страницу с одним запросом и вывожу ее как информер :
    Код:
    if($_GET['lim'] != ''){
    $lim = $_GET['lim'];
    } else {
    $lim = 4;	
    }
    if($_GET['blank'] != 0){
    $target = '_blank';	
    } else {
    $target = '_self';	
    }
    $query="select * FROM pro_films ORDER BY RAND() LIMIT 0, $lim";
    $result=mysql_query($query);
    
    //----------------------------выводим таблицу--------------------------
    print"document.write(\"<center><div class='box box-grid events-top'><table width='100%' border='0' cellspacing='3' cellpadding='0'>\");";
    $i=0;
    while ($res = mysql_fetch_object($result)){
    
    
    print"document.write(\"<td><a target = '".$target."' class='tip-bottom item' href='http://www.mysite.net/dating/kino.php'><img src='http://mysite.net".$res->mini_img."' align='left' width='165' height='97' border='none'><span class='dt opacity'>".$res->period."</span><span class='tt opacity'>".$res->title."</span></a></td>\");";
    
    
    $i++;
    }
     
    print"document.write(\"  </table></div></center>\");";
    И подключаю этот информер к другим сайтам вот так:

    <script src="http://mysite.net/partnerka/new_kino.php?lim=5&amp;blank=0" type="text/javascript" language="javascript">
    </script>

    Все работает но возросла нагрузка на базу от куда информер берет данные....

    Подскажите пожалуйста как лучше его закешировать потому как этому файлу еще передаются через GET параметры лимит вывода и открывать или не открывать в новом окне : new_kino.php?lim=5&amp;blank=0
     
  2. ar4ik

    ar4ik

    Регистр.:
    26 ноя 2007
    Сообщения:
    331
    Симпатии:
    95
    lim масимально сколько? есть какие-нибудь рамки?
     
  3. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Вообще нет но я ставлю лимит 5
     
  4. Xata6

    Xata6 Постоялец

    Регистр.:
    20 мар 2007
    Сообщения:
    84
    Симпатии:
    5
    сделай отдельную htmlку которая будет обновляться cron заданием по определенному времени, это будет лучший вариант

    cron запускае php или еще что, чтобы сгенерить html с данными, и этот файл ты скармливаешь уже кому нада, чтобы не перебивать везде линки, сделай просто при запросе старой ссылки тупо инклуд той htmlки а другой код убери
     
  5. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    129
    Симпатии:
    39
    Он передаёт параметры get, создать нужно будет несколько записейс cron


    Гениально простое решение.

    http://php.russofile.ru/ru/translate/unsort/caching_5_steps/

    Только нужно добавить проверку на левые параметры get.

    И ещё $lim = $_GET['lim']; имеет только цифровое значение, и она уходит в DB, не фильтрованная(!) mysql injection
     
  6. goodvin

    goodvin Человек-Волшебник

    Регистр.:
    27 июн 2006
    Сообщения:
    667
    Симпатии:
    687
    Нужно избавится от RAND().

    Как вариант:
    в делаешь выборку с базы всех записей допустим по id, а потом рандамно выбираешь id через масив.
    после этого берешь свой масив с базы и ложешь его в мемкеш на 5 мин.
    потом при выводе делай проверку на присутствие в мемкеше твоих данных.
     
  7. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Спасибо всем!

    Воспользовался кешированием MySQL замечательно работает...даже с RAND()

    http://avy.ru/ftopic1869.html
     
  8. goodvin

    goodvin Человек-Волшебник

    Регистр.:
    27 июн 2006
    Сообщения:
    667
    Симпатии:
    687
    я тоже ранее использовал этот класс.
    Но есть одно проблема.

    С увеличением запросов растет количество файлов,
    и возникают некие тормоза в связи с количеством файлов, тк. они не удаляются!

    Вместо этого лучше уже в мемкеш результат ложить даже после RAND().
    Тем более от этого зависит скорость загрузки твоей страницы.
     
  9. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Дело в то что у меня стоит джумла 1.0 на ней много компонентов поставил на нее компонент QCache думал он увидит установленный на хостинге XCache, нет не видит не понятно почему Пришлось воспользоваться JRECache, а этот класс которым я воспользовался мне нужен для кеширования запросов информеров их не так уж много...Memcached на хостинге не установлен :(
     
Статус темы:
Закрыта.