存档

文章标签 ‘cache’

本文只提供思路,程序代码在此就不方便发布了~
第一:每个程序代码都不样
第二:不能随便公布客户的代码~呵呵
如有类似需求,可联系QQ:1301425789
可以看到现在首页的执行时间已经是1.8秒以上了,如果访问量太大,有可能就会导致耗资源,加入缓存是最好的解决方法。我设置的数据库表如下:

Cache_id

Cache_key

Cache_Content

Cache_LastCreate

自动编号

缓存关键字

缓存内容

最后生成日期

 
设计缓存的时候,主要需要考虑以下两点:
 

1)     不经常改动部分缓存数据同步
保持缓存同步有两种方法:设置缓存刷新频率、实时更新
设置缓存刷新频率

<%
     缓存关键字:http://www.aaa.com/cp_view.asp?ID=68727
     更 新 频率:1天
     到 期 日期:最后生成日期+更 新 频率
    Sql:select Cache_Content from CacheTable where Cache_key=缓存关键字 and Cache_LaseCreate<到期日期
     没有找到记录:{
         将页面数据保存到数据库
select * from CacheTable where Cache_key=缓存关键字
没有记录{插入记录}有记录{更新生成日期,并保存记录}
     }找到记录:{
         直接输出
     }
%>
 
实时更新
     这种有点麻烦,但是是一个比较好的方案。唯一的缺点是保存的时候需要多次操作数据库。以 市场页为例:
给市场数据库添加一个最后更新日期
数据添加页面:凡是该分类下的所有页面更新,均更新最后更新日期。
最终显示页面:多表查询,如果当前市场最后更新日期<缓存日期,并且有缓存则直接输出缓存,否则创建缓存并输出。

2)     (经常改动不废)非静态的部分
这个比较简单,主要是会员登录,ASP脚本判断状态,输出JS更改页面的动态部分

三 29th, 2010 | Filed under Share(分享), Thinks(想法)
标签: , ,

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 . [...]

二 1st, 2010 | Filed under PHP, Share(分享)
标签: , ,

前几天写过一篇巧用404.php解决Wordpress耗资源的问题,给Wordpress加个缓存功能(http://www.miaoqiyuan.cn/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 [...]

一 22nd, 2010 | Filed under Experience(经验), PHP, Share(分享), Thinks(想法)
标签: , , ,

刚开始搭建博客的时候,看中了wordpress的功能强大,经过两年的不懈努力,我的小博已经从pr0到pr4(最近降到pr3),有的时候每日pv竟然能到3万,这时idc那边就提醒我好资源了。自己购买了台西数的VPS,配置好后,cpu也是居高不下,首页竟然要4秒钟才能打开。当时考虑到seo,路径使用了http://www.miaoqiyuan.cn/p/wordpress-plus-chc(注意,不是文件夹)的模式,生成静态,路径就变了http://www.miaoqiyuan.cn/p/wordpress-plus-chc/。第一,我不想耗资源,第二,我不想改变路径。
我博客的现在的路径是怎样实现的呢?这个问题请看我以前的一篇文章WordPress无Rewrite用cos-html-cache实现静态化(http://www.miaoqiyuan.cn/p/wordpress-plus-chc)。既然一切皆由404.php起,那么现在就从404.php找切入点,比如在404.php上加个缓存。声明:本文由苗启源发表在他的博客,一切思想皆为苗启源原创,转帖请注明出处。
这个换成怎样加呢?改动源程序也不现实,而且文件太多,太麻烦。这时我想到了前几天写的一篇文章Python 之 XML与文本操作(http://www.miaoqiyuan.cn/p/python-xml-file),在那篇文章中,也是使用了缓存,比如请求http://www.miaoqiyuan.cn/products/,因为没有用到数据库,把请求过的网址记录到一个文本文件,少了还好说,多了就。。。最好的办吧就是把每个URL地址返回的内容保存到MD5(URL)的文件中,如果读取的时候该文件存在,说明已经读取过了,有缓存。python源码请见Python 之 XML与文本操作(http://www.miaoqiyuan.cn/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.miaoqiyuan.cn/index.php".$_SERVER['REQUEST_URI']);
$fp=fopen("./404cache/".$CacheStr.".tmp","w");
fwrite($fp,$getHtml);
echo $getHtml;
}
echo fread($fp,1100000);
?>

基本功能都实现了。不过更新是个问题,还有缓存数据,我会分别用Mysql数据库,XML文件,文本文件分别存取,关于速率我还要进一步进行测试。文本文件的存储缓存的一个致命的缺点就是最后更新时间,缓存的有效时间不好控制。如果用xml或数据库,这个问题就简单了。好了,现在时间太晚了,就此结笔(键盘)。

一 16th, 2010 | Filed under PHP, Share(分享), Thinks(想法)