Heim >Backend-Entwicklung >PHP-Tutorial >请问PHP有什么好的缓存吗

请问PHP有什么好的缓存吗

WBOY
WBOYOriginal
2016-06-23 14:39:231172Durchsuche

比如我要缓存index.php首页,10分钟更新一次,怎么写缓存啊!
以前做.net,现在转PHP,很多页面需要缓存,不知道php怎么写

求写法,最好有个demo

比如index.php,然后别人访问的时候每10分钟更新1次index.html,当然index.html是index.php的缓存,

及时不生成index.html,
要求index.php每5分钟更新1次数据

怎么写啊!!!

生成最好!!


回复讨论(解决方案)

用smarty模板哇,里面有缓存,http://www.smarty.net/docsv2/en/,手册内容好像有点多,google一下.


全英文的

memcached

你在.net怎么做,就在php怎么做
不过是方言不同而已

memcached
memcached缓存页面?没做过,是把整个页面丢进一个值里面么?

在这个场景下memcached做缓存是很2的事情。不提通讯量,你一个生成好的纯静态页,每次还要先加载php,从memcached服务器读取出来,再返回给客户机,效率很低。

推荐的方法是把index.html生成文件缓存,然后跑脚本定时更新。

你要缓存首先要知道自己为什么要缓存,想缓存什么...

楼上的每个回答都是在某种程度上可行的, 关键看你要做啥...

要缓存整个页面的话,直接自己创建个静态文件就可以了。ob_start(),ob_get_contents(),flush()或ob_flush(),这四个函数足够了。

每次请求这个页面时判断一下,如果这个静态文件存在,或者当前时间-它的创建时间>=10分钟,就重新用上面的方法生成静态页面。否则就直接读出这个静态文件返回给浏览器。

memcached或redis适合缓存数据,这种需要缓存整个页面的,用上面的方法最好。

couch db

谢谢大家帮忙,俺测试了1个页面缓存,生成1个html,关键并不是我所需要的,
比如根据条件我查询数据,缓存时间设置1分钟,

结果我选择查询条件,数据没发生改变

我想需要的是选择查询时间,数据发生改变,同事,同样的查询条件,1分钟更新一次,
比如我选择时间区域,开始默认是近1天数据,
当我选择前天条件查询的时候,要的是前天的诗句,
如果我再次查询前天数据,还是前天数据,但1分钟内不会有更新,1分钟后查询才会有更新,
1分钟内当我选择后天数据,是后天数据,而不是前天的数据

就是查询条件改变,根据当天条件进行1分钟或者1小时,1天的缓存,
不影响其他条件查询,当然其他条件也是1分钟或者1小时。1天的时间缓存

说白了,就是根据条件查询,进行数据缓存

按你#11描述,你的设想是有问题的
这样的话,你需要缓存的是自有史以来所有时刻的现场。因为任何人都可能从以往的任何时刻开始查询
以一分钟为界一年为期,至少也需要6151680个缓存项目
这显然是不可取的

由于可用的查询表达式是有限的,所以你可以依据查询表达式创建若干个视图。从而使查询运算交与数据库后台完成

是啊!所以头疼啊!!!
所以想放到内存中,然后定期清理内存

用输入输出缓冲做个文件缓存

新手,路过~你这个需求我觉得用静态页缓存比较好

varnish 可以做页面缓存

这个和一些网址导航类网站的首页缓存是一样的。只不过他们将首页缓存在客户端的期限可能长一点,比如1个月、3个月......
具体方法为:
1、将首页所引用的相关素件(图片、CSS文件、JS文件等)存到一个专门的目录中,比如cache;
2、.htaccess中加入规则:

#缓存首页物件 
#RewriteCond %{HTTP_HOST} ^www.162100.com [NC]
#RewriteCond %{REQUEST_URI} ^$ [OR]
#RewriteCond %{REQUEST_URI} ^/$ [OR]
#RewriteCond %{REQUEST_URI} ^/index.html$ [NC]
#RewriteRule (index\.html) gzip.php?cfile=$1 [L]
#RewriteRule ^(cache\/.+)$ gzip.php?cfile=$1 [L]

3、根目录(即同index.html一个目录)做一个文件gzip.php,代码为:

<?phpif(empty($_REQUEST['cfile'])) exit();$filename=$_REQUEST['cfile'];//使用什么编码,你自己清楚$ext=strrchr($filename,'.');$type="Content-type: text/html; charset=utf-8";switch($ext) {  case '.css':    $type="Content-type: text/css";    break;  case '.js':    $type="Content-type: text/javascript";    break;  case '.gif':    $type="Content-type: image/gif";    break;  case '.jpg':    $type="Content-type: image/jpeg";    break;  case '.png':    $type="Content-type: image/png";    break;  case '.html':    $type="Content-type: text/html; charset=utf-8";    break;  default:    break;    //exit();} if(file_exists($filename)){  $m_time=filemtime($filename);  $l_time=gmdate("D, d M Y H:i:s", $m_time);  if($_SERVER['HTTP_IF_MODIFIED_SINCE'] && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])==$m_time){    header("HTTP/1.1 304 Not Modified");  }else{    header("Expires: ".gmdate("D, d M Y H:i:s", time() + 2592000)." GMT"); //缓存时间自己定,我这个是1个月    header("Cache-Control: max-age=2592000");    //header("Pragma: ");    header("Last-Modified: ".$l_time." GMT");    header($type);    //header("Content-Length: ".filesize($filename)."");    echo file_get_contents($filename);  }}else{  header("HTTP/1.0 404 Not Found");  die;} ?> 


注:
1、.htaccess中的网址要写自己的;
2、上述是我的首页缓存客户端的方法,我这里好用,不知对你有没有帮助。如果不管用别怨我就行。



补充一点,上述方法缓存生效如否可在IE缓存文件夹里看到首页及各素件的缓存有效期,如果有有效期(比如你的10分钟)说明生效了。

用户浏览时,如果静态首页有效期没有过,它则自动调用客户端缓存里的,如果过了则会再生成。
这是我写的方法,大家见笑了。

那个是整个首页

memcached  数据缓存适合你

恩恩 memcached

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn