MySQL Cache Class

Soul_Stealler

Registered
Код:
<?php
/*
Title: MySQL Cache
Created by: Radoslav Mazganov
Email: raadoo at abv dot bg
Portfolio: http://soul-design.org/

How To Use
$cache->ClearCache('7c1141fbce2eb2407964b25b59b43ed4');
$cache->ClearCache();
$cache->Query("SELECT * FROM `table`");
$cache->Query("SELECT * FROM `table`", true);
*/

class MySQLCache{

	public $dir = 'cache';
	public $ext = 'txt';
	
	function QueryCached($key){
		return file_exists($this->dir.'/'.$key.'.'.$this->ext);
	}
	
	function ReturnQuery($key){
		$file = $this->dir.'/'.$key.'.'.$this->ext;
		$handle = fopen($file, "r");
		$contents = fread($handle, filesize($file));
		fclose($handle);
		return unserialize(trim($contents));
	}
	
	function CacheQuery($query, $key, $result = false){
		$results = mysql_query($query);
		while ($row = mysql_fetch_array($results)) $all_rows[] = $row;
		$temp = $all_rows;
		$all_rows = serialize($all_rows);	
		$fp = fopen($this->dir.'/'.$key.'.'.$this->ext, 'w');
		fwrite($fp, $all_rows);
		fclose($fp);
		if($result) return $temp;
	}
	
	function ClearCache($key = false){
		if(strlen($key) == '32'){
			if(self::QueryCached($key)) unlink($this->dir.'/'.$key.'.'.$this->ext);
		} else {
			$all_files = scandir($this->dir.'/');
			foreach($all_files as $file){
				if(end(explode('.', $file)) == $this->ext) unlink($this->dir.'/'.$file);
			}
		}
	}
	
	function Query($query, $result = false){
		$key = md5($query);
		if($result){
			if(self::QueryCached($key)){
				$this->result = self::ReturnQuery($key);
			} else $this->result = self::CacheQuery($query, $key, true);
		} else {
			if(!self::QueryCached($key)) self::CacheQuery($query, $key);
		}
	}
}
?>

Моля не разпространявайте по форуми и сайтове :wink:
 
Код:
SELECT SQL_CACHE query
не го ли знаеш? :)
Кешира в паметта, а ако не се побира на диска в /var/lib/mysql
И кеша се обновява като се insert/update/delete нещо от таблицата ;)

Резултата може да го видиш в всичките сайтове, които съм правил :)
Зареждат много по-бързо защото паметта е по-бърза от диска
 
Едно малко обяснение да беше сложил за тоя код какво прави

alex95_bg_2 това което си го дал ? къде го пишеш дай пример
 
Да речем имаш заявка
Код:
SELECT table1.*, COUNT(table2.id) AS cnt FROM table1 INNER JOIN table2 ON table1. id = table2 . post_id LIMIT 12
С подобна заявка си изкарвам урок и колко коментара има към него
Малко може да се бави, за това я давам като пример

Сега ако напиша
Код:
SELECT SQL_CACHE table1.*, COUNT(table2.id) AS cnt FROM table1 INNER JOIN table2 ON table1. id = table2 . post_id LIMIT 12
MySQL ще изпълни заявката и ще я запомни в неговия си кеш
И докато не изтрия или не добавя нов урок / коментар към този урок заявката ще се зарежда от кеша, т.е. няма да се бави да я изпълнява а знае какво връща :)

Повечето хостинг компании са пуснали sql кеширането
 
Но пак пращаш заявки :wink:
Мен целта ми е изобщо да не минава през mysql след като е кеширана :)
 
Soul_Stealler кажи поне къде се слага тоя код в всяка страница на оделен файл и после се инкудва какво се прави праснал си го тука все една само за украса и има хора който не могат да разберат всичко и трябва поне едно малко просто обяснение

Седим си са и му се чудя на кода къде да го наръгам какво да го правя

ще съм ти благодарен, а и не само аз ако напишеш нещо за тоя код
 
How To Use
$cache->ClearCache('7c1141fbce2eb2407964b25b59b43ed4');
$cache->ClearCache();
$cache->Query("SELECT * FROM `table`");
$cache->Query("SELECT * FROM `table`", true);
*/
написал си е всичко ;)
Имаш ключ md5-нат който му го подаваш
query(заявка, да върне ли резултат)
Само огледай кода и готово
Обаче това не е много лесно като цяло ;)
Не е само да го сложиш и всичко ще литне, а трябва да помислиш кои заявки се бавят, къде ти трябва, etc

А само да допълня, то ако има mysql_pconnect нищо няма да се усети по-бавно от файлове
Даже напротив, mysql ще ползва заявката като ключ, ако съществува ще я даде направ от паметта, вместо да ръчка файловата система за файла

А радо ако ще си на VPS мога да ти препоръчам и memcache за php
Не че файловия кеш не е удачен, но тези методи са даже по-бързи :)
 
alex95_bg_2
ако можех щях да ти дам +1

друго което автора е спестил папкатата cache трябва да е с CHMOD 777 поне при мен при друга настройка не работеше
 

Back
Горе