设为首页 收藏本站
查看: 471|回复: 0

[经验分享] php提高网站性能之PHP数据缓存技术详解

[复制链接]

尚未签到

发表于 2015-8-27 09:20:42 | 显示全部楼层 |阅读模式
数据缓存是web开发中常用的一种性能优化方法。目前主要文件缓存或者数据库缓存两种形式,数据库缓存数据库不是什么不可能的事情,的确也是很好很重要的。我认为传统数据库主要是从业务层、模块设计等方面来考虑的,而缓存数据库主要是从实现层来设计的,主要是为了缓存常用的多表查询之类的。这里主要将的是文件缓存,网上很多资料了,这里我转载了一些原理资料。
    Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。

1 DSC0000.gif function load_data($id,$cache_lifetime) {     
2   
3// the return data     
4   
5$data = array();     
6   
7// make cache filename     
8   
9$cache_filename = ‘cache_‘.$id.‘.php‘;     
10   
11// check cache file‘s last modify time     
12   
13$cache_filetime = filemtime($cache_filename);     
14   
15if (time() - $cache_filetime <= $cache_lifetime) {     
16   
17//** the cache is not expire     
18   
19include($cache_filename);     
20   
21} else {     
22   
23//** the cache is expired     
24   
25// load data from database     
26   
27// DSC0001.gif      
28   
29while ($dbo->nextRecord()) {     
30   
31// $data[] =      
32   
33}     
34   
35// format the data as a php file     
36   
37$data_cache = "   
38  
39while (list($key, $val) = each($data)) {   
40  
41$data_cache .= "$data[&#8216;$key&#8216;]=array(&#8216;";   
42  
43$data_cache .= "&#8216;NAME&#8216;=>"".qoute($val[&#8216;NAME&#8216;])."\","     
44   
45$data_cache .= "&#8216;VALUE&#8216;=>\"".qoute($val[&#8216;VALUE&#8216;])."\""     
46   
47$data_cache .= ";);";     
48   
49}     
50   
51$data_cache = "?>";     
52   
53// save the data to the cache file     
54   
55if ($fd = fopen($cache_filename,&#8216;w+&#8216;)) {     
56   
57fputs($fd,$data_cache);     
58   
59fclose($fd);     
60   
61}     
62   
63}     
64   
65return $data;     
66   
67}     
68   
69?>   
适用情况:
    1.数据相对比较稳定,主要是读取操作。
    2.文件操作要比数据库操作快。
    3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。
    4.Web/DB分离结构或者多Web单DB结构。////////////补充



1<?php     
2function cache_isvalid($cacheid,$expire=300) {     
3@clearstatcache();     
4if (!@file_exists($cacheid)) return false;     
5if (!($mtime=@filemtime($cacheid))) return false;     
6$nowtime=mktime();     
7if (($mtime+$expire)<$nowtime) {     
8return false;     
9}else{     
10return true;     
11}     
12}     
13   
14function cache_write($cacheid,$cachecontent) {     
15$retry=100;     
16for ($i=0;$i<$retry;$i++) {     
17$ft=@fopen($cacheid,"wb");     
18if ($ft!=false) break;     
19if ($i==($retry-1)) return false;     
20}     
21@flock($ft,LOCK_UN);     
22@flock($ft,LOCK_EX|LOCK_NB);     
23for ($i=0;$i<$retry;$i++) {     
24$tmp=@fwrite($ft,$cachecontent);     
25if ($tmp!=false) break;     
26if ($i==($retry-1)) return false;     
27}     
28@flock($ft,LOCK_UN);     
29@fclose($ft);     
30@chmod($cacheid,0777);     
31return true;     
32}     
33   
34function cache_fetch($cacheid) {     
35$retry=100;     
36for ($i=0;$i<$retry;$i++) {     
37$ft=@fopen($cacheid,"rb");     
38if ($ft!=false) break;     
39if ($i==($retry-1)) return false;     
40}     
41$cachecontent='';     
42while (!@feof($ft)) {     
43$cachecontent.=@fread($ft,4096);     
44}     
45@fclose($ft);     
46return $cachecontent;     
47}     
48   
49function cache_clear_expired($cachedirname,$expire=300) {     
50$cachedir=@opendir($cachedirname);     
51while (false!==($userfile=@readdir($cachedir))) {     
52if ($userfile!="." and $userfile!=".." and substr($userfile,-4,4)=='.htm') {     
53$cacheid=$cachedirname.'/'.$userfile;     
54if (!cache_isvalid($cacheid,$expire)) @unlink($cacheid);     
55}     
56}     
57@closedir($cachedir);     
58}     
59   
60?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104810-1-1.html 上篇帖子: php 代码优化之经典事例 下篇帖子: php提高网站性能之PHP数据缓存技术详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表