標簽歸檔:cache

G級Access網站優化

如果做企業站,ASP+Access是一個最佳選擇。但是如果Access的數據庫達到G級別,那么性能可能就會大大的下降。如果數據庫沒有優化,打開asp頁面幾秒是常有的事情。如果一個Access表內幾十萬條數據,恰巧ASP頁面又有幾十個查詢,可能就悲劇了。網站打開時間要按分鐘計算了。

Asp+Access以前數據量少的時候,沒有任何問題。數據量一大,各種麻煩的問題就多了起來??偛荒茏尶蛻舻葞追昼姶蜷_首頁把。 繼續閱讀

對某網站優化草案-為ASP網站添加緩存

本文只提供思路,程序代碼在此就不方便發布了~
第一:每個程序代碼都不樣
第二:不能隨便公布客戶的代碼~呵呵
如有類似需求,可聯系QQ:1301425789

可以看到現在首頁的執行時間已經是1.8秒以上了,如果訪問量太大,有可能就會導致耗資源,加入緩存是最好的解決方法。我設置的數據庫表如下:

Cache_id
Cache_key
Cache_Content
Cache_LastCreate
自動編號
緩存關鍵字
緩存內容
最后生成日期
?
設計緩存的時候,主要需要考慮以下兩點:
?

1)???? 不經常改動部分緩存數據同步

保持緩存同步有兩種方法:設置緩存刷新頻率、實時更新

設置緩存刷新頻率

<%
???? 更 新 頻率:1天
???? 到 期 日期:最后生成日期+更 新 頻率
??? Sql:select Cache_Content from CacheTable where Cache_key=緩存關鍵字 and Cache_LaseCreate<到期日期
???? 沒有找到記錄:{
???????? 將頁面數據保存到數據庫
select * from CacheTable where Cache_key=緩存關鍵字
沒有記錄{插入記錄}有記錄{更新生成日期,并保存記錄}
???? }找到記錄:{
???????? 直接輸出
???? }
%>
?
實時更新
???? 這種有點麻煩,但是是一個比較好的方案。唯一的缺點是保存的時候需要多次操作數據庫。以 市場頁為例:
給市場數據庫添加一個最后更新日期
數據添加頁面:凡是該分類下的所有頁面更新,均更新最后更新日期。
最終顯示頁面:多表查詢,如果當前市場最后更新日期<緩存日期,并且有緩存則直接輸出緩存,否則創建緩存并輸出。

2)???? (經常改動不廢)非靜態的部分

這個比較簡單,主要是會員登錄,ASP腳本判斷狀態,輸出JS更改頁面的動態部分

phpCache 更新至0.11

phpCache,現在更新到了0.11。

2010-1-31 Vesion 0.11
修復了每次讀取字符不能超過128KB的限制
去除了nocahce模式存儲的文件的功能
增加了讀取失敗的錯誤提示符

有需要的朋友請到http://www.catseven.cn/phpCache/下載。

< ?php
	/*
	CatSeven phpCache Vesion 0.11
	
	======CopyRight======
	Home:http://www.catseven.cn/phpCache/
	Design:Miao Qiyuan[miaoqiyuan.cn]
	*/
	
	class cache404{
		public $K,$P,$V;
		public function __construct($URI,$P='blog',$Par='./404cache/'){
			$this->U = $URI;
			$this->K = md5($URI);
			$this->P = $P;
			$this->Par = $Par;
			$this->E = '.tmp_miaoqiyuan';
			$this->F = $this->Par . $this->P . '/' . $this->K . $this->E;
			$this->V = 'CatSeven phpCache Error.';
		}
		public function getHtml($u){
			return file_get_contents($u,NULL,NULL,-1,1000000);
		}
		public function getCache(){
			if(!!($fp=@fopen($this->F,'r'))){
				$html=fread($fp,102400);
			}else{
				if($html=$this->getHtml($this->U)){
					$this->addIndex();
					$fp=fopen($this->F,'w');
					fwrite($fp,$html);
				}else{
					$html=$this->V;
				}
			}
			if($fp)fclose($fp);
			return $html;
		}
		public function noCache(){
			if(!$html=$this->getHtml($this->U))$html=$this->V;
			return $html;
		}
		public function flushCache(){
			unlink($this->F);
		}
		public function addIndex(){
			$fpidx=fopen($this->Par . $this->P . '.rtf','a');
			fwrite($fpidx,$this->K . '	' . $this->U . "\n");
			fclose($fpidx);
		}
}
?>

寫的一個簡單的PHP緩存類

前幾天寫過一篇巧用404.php解決Wordpress耗資源的問題,給Wordpress加個緩存功能(http://www.okfdzs1868.com/p/wordpress-haoziyuan-wordpress-cache)中提到了PHP緩存的方法,總感覺不是很方便,現在我又寫了一個新的。

< ?php
	class cache404{
		public $K,$P;
		public function __construct($URI,$P='blog',$Par='./cache/'){
			$this->U = $URI;
			$this->K = md5($URI);
			$this->P = $P;
			$this->Par = $Par;
			$this->E = '.tmp_miaoqiyuan';
			$this->F = $this->Par . $this->P . '/' . $this->K . $this->E;
		}
		public function getCache(){
			if(!!($fp=@fopen($this->F,'r'))){
				$html=fread($fp,102400);
			}else{
				$html=file_get_contents($this->U);
				$this->addIndex();
				$fp=fopen($this->F,'w');
				fwrite($fp,$html);
			}
			fclose($fp);
			return $html;
		}
		public function noCache(){
			$html=file_get_contents($this->U);
			$fp=fopen($this->F,'w');
			fwrite($fp,$html);
			fclose($fp);
			return $html;
		}
		public function flushCache(){
			unlink($this->F);
		}
		public function addIndex(){
			$fpidx=fopen($this->Par . $this->P . '.rtf','a');
			fwrite($fpidx,$this->K . '	' .$this->U);
			fclose($fpidx);
		}
}
?>

用的時候很簡單

	require_once('./inc/404cache.php');
	$Cache=new cache404($URI,$Path);
	#echo $Cache->noCache();
	echo $Cache->getCache();
< ?php
	require_once('./inc/404cache.php');
	$q=explode("/",$URI=substr(($qs = strtolower($_SERVER['QUERY_STRING'])),strpos($qs, ':80')+4));
	$URI="/".$URI;
	switch($q[0]){
		case 'test':
			#/test	->	/seo_test/test.asp
			if(preg_match('/^\/test(\/)?$/',$URI)){
				$URI='http:'.'//'.$_SERVER['SERVER_NAME'].'/seo_test/test.asp';
			}

			#/test/[a-z]\.html	->	/seo_test/test.asp?key=$1
			else if(preg_match('/^\/test\/([a-z])\.html$/',$URI,$Match)){
				$URI='http:'.'//'.$_SERVER['SERVER_NAME'].'/seo_test/test.asp?key='.$Match[1];
			}else{
				$URI='http:'.'//'.$_SERVER['SERVER_NAME'].'/seo_test/test.asp';
			}
			$Path='test';
		default:
			$URI='http:'.'//'.$_SERVER['SERVER_NAME'].'/index.php'.$URI;
			$Path='blog';
	}
	$Cache=new cache404($URI,$Path);
	#echo $Cache->getCache();
	echo $Cache->noCache();
?>

巧用404.php解決WordPress耗資源的問題,給WordPress加個緩存功能

剛開始搭建博客的時候,看中了wordpress的功能強大,經過兩年的不懈努力,我的小博已經從pr0到pr4(最近降到pr3),有的時候每日pv竟然能到3萬,這時idc那邊就提醒我好資源了。自己購買了臺西數的VPS,配置好后,cpu也是居高不下,首頁竟然要4秒鐘才能打開。當時考慮到seo,路徑使用了http://www.okfdzs1868.com/p/wordpress-plus-chc(注意,不是文件夾)的模式,生成靜態,路徑就變了http://www.okfdzs1868.com/p/wordpress-plus-chc/。第一,我不想耗資源,第二,我不想改變路徑。
我博客的現在的路徑是怎樣實現的呢?這個問題請看我以前的一篇文章WordPress無Rewrite用cos-html-cache實現靜態化(http://www.okfdzs1868.com/p/wordpress-plus-chc)。既然一切皆由404.php起,那么現在就從404.php找切入點,比如在404.php上加個緩存。聲明:本文由苗啟源發表在他的博客,一切思想皆為苗啟源原創,轉帖請注明出處。
這個換成怎樣加呢?改動源程序也不現實,而且文件太多,太麻煩。這時我想到了前幾天寫的一篇文章Python 之 XML與文本操作(http://www.okfdzs1868.com/p/python-xml-file),在那篇文章中,也是使用了緩存,比如請求http://www.okfdzs1868.com/products/,因為沒有用到數據庫,把請求過的網址記錄到一個文本文件,少了還好說,多了就。。。最好的辦吧就是把每個URL地址返回的內容保存到MD5(URL)的文件中,如果讀取的時候該文件存在,說明已經讀取過了,有緩存。python源碼請見Python 之 XML與文本操作(http://www.okfdzs1868.com/p/python-xml-file)。
這樣就好辦了,直接按以前說的那種方法。404.php返回的請求路徑,我沒給md5下,如果存在,就直接讀取,不存在,執行程序,然后保存到緩存文件中。下面給出404.php的代碼,如果覺得本文對您有所幫助,請Ctrl+D收藏我的博客地址,我最近準備寫一個php的緩存類哦。

< ?php
$qs = $_SERVER['QUERY_STRING'];
$_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ':80')+3);
$CacheStr = md5($_SERVER['REQUEST_URI']);

if(!$fp=@fopen("./404cache/".$CacheStr.".tmp","r")){
	$getHtml=file_get_contents("http://www.okfdzs1868.com/index.php".$_SERVER['REQUEST_URI']);
	$fp=fopen("./404cache/".$CacheStr.".tmp","w");
	fwrite($fp,$getHtml);
	echo $getHtml;
}
echo fread($fp,1100000);
?>

基本功能都實現了。不過更新是個問題,還有緩存數據,我會分別用Mysql數據庫,XML文件,文本文件分別存取,關于速率我還要進一步進行測試。文本文件的存儲緩存的一個致命的缺點就是最后更新時間,緩存的有效時間不好控制。如果用xml或數據庫,這個問題就簡單了。好了,現在時間太晚了,就此結筆(鍵盤)。