В связи с масштабностью своего проекта (адрес пока не раскрываю, не конкурсный даже)) назрела проблема с необходимостью кешировать запросы к сторонней БД (не диафан)ю Порыскав весь форум, толком не нашел ни одного примера реализации кеша. Не думаю, что требуется для небольшой функции создавать отдельный модуль с неск. взаимосвязанных файлов - нет смысла в этом, он не конфигурируемый. его назначение лишь вывод последних данных с другой БД и все. Одно дело, когда таких функций единицы, но дело пойдет наперекосяк, если нагрузка повысится - увеличится приток посетителей и БД просто будет постоянно делать однообразные left join'ы.
Есть идея реализации простого кеширования в функции типа такой?
Код
public function show_last_torrents()
{
/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "***"; //
$password = "***"; //
$dbName = "database"; // название базы данных
/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
mysql_query ('SET NAMES utf8');
/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());
$query = "SELECT torrents.*,torrents.image1 AS kartinko, categories.id AS catid, free, SUM(trackers.leechers) AS leechers1, SUM(trackers.seeders) AS seeders1, torrents.leechers, torrents.seeders, categories.name AS catname, categories.image AS catimage, trackers.tracker AS local, users.username, users.class FROM torrents LEFT JOIN users ON torrents.owner = users.id LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN trackers ON torrents.id=trackers.torrent WHERE category <> 0 and banned = 'no' GROUP BY torrents.id ORDER BY added DESC LIMIT 12";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());
/* Выводим данные из таблицы */
echo ("<ul class=\"list img-list\">");
class SimpleCache{
var $cachefile;
var $cachetime;
function __construct($cachefile,$cachetime=60){
$this ->cachefile=$cachefile;
$this -> cachetime =$cachetime;
}
function get()
{
if (file_exists($this ->cachefile) && time() - $this ->cachetime < filemtime($this ->cachefile)) {
Вставь его гденить в конце файла.
Дальше как его используем в твоем случае
Код
public function show_last_torrents()
{
$Cache=new SimpleCache('cache/torrents.html',60);// кеш на 60 секунд
if(($content=$Cache->get())===false)
{
/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "***"; //
$password = "***"; //
$dbName = "database"; // название базы данных
/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
mysql_query ('SET NAMES utf8');
/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());
$query = "SELECT torrents.*,torrents.image1 AS kartinko, categories.id AS catid, free, SUM(trackers.leechers) AS leechers1, SUM(trackers.seeders) AS seeders1, torrents.leechers, torrents.seeders, categories.name AS catname, categories.image AS catimage, trackers.tracker AS local, users.username, users.class FROM torrents LEFT JOIN users ON torrents.owner = users.id LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN trackers ON torrents.id=trackers.torrent WHERE category <> 0 and banned = 'no' GROUP BY torrents.id ORDER BY added DESC LIMIT 12";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());
/* Выводим данные из таблицы */
$content= "<ul class=\"list img-list\">";
А теперь без велосипедов, средствами Диафана по документации
Код
public function show_last_torrents()
{
$cache_meta = array("name" => "torrents");
if(! $result = $this->diafan->_cache->get($cache_meta, "site"))
{
// генерирование кэша
// cохранение кэша
/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "***"; //
$password = "***"; //
$dbName = "database"; // название базы данных
/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
mysql_query ('SET NAMES utf8');
/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());
$query = "SELECT torrents.*,torrents.image1 AS kartinko, categories.id AS catid, free, SUM(trackers.leechers) AS leechers1, SUM(trackers.seeders) AS seeders1, torrents.leechers, torrents.seeders, categories.name AS catname, categories.image AS catimage, trackers.tracker AS local, users.username, users.class FROM torrents LEFT JOIN users ON torrents.owner = users.id LEFT JOIN categories ON torrents.category = categories.id LEFT JOIN trackers ON torrents.id=trackers.torrent WHERE category <> 0 and banned = 'no' GROUP BY torrents.id ORDER BY added DESC LIMIT 12";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());
/* Выводим данные из таблицы */
$content= "<ul class=\"list img-list\">";
В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке.