喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

招聘PHP开发人员(北京)

上一主题 下一主题
 15  1/2  1  2  > 
     
标题: 喜悦原创首发 - 小论各种缓存手段  
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
喜悦原创首发 - 小论各种缓存手段

缓存能够加速程序的运行及显示.
但这里讨论的缓存指的不是php的预编译代码.所以zo,eacc,apc等不在讨论之列.

首先讨论程序手段
1 asp:
可使用application进行缓存.比较典型的例子就是动网所使用的缓存类.
由于asp提供的方便,所以感觉asp方面的缓存没什么特别大的进步.

2 php:
由于php没有类似application这样的全局变量.
所以许多人独辟蹊径找到了自己的方法,以下列举几种.

2.1 文件缓存(php代码)
常见例子:discuz,phpwind
dz将缓存转换成对应的php代码,然后保存起来,pw也是如此
重新include后便得到对应的变量值.

pw参见:admin/cache.php,require/pw_func.php
pw代码举例:
$forum_cache.="'$sub2[fid]' => Array(\n\t\t'fid' => '$sub2[fid]',\n\t\t'fup'=>'$sub2[fup]',\n\t\t'type' => '$sub2[type]',\n\t\t'name' => '$sub2[name]',\n\t\t'f_type' => '$sub2[f_type]',\n\t\t'cms' => '$sub2[cms]',\n\t\t'ifhide' => '$sub2[ifhide]',\n\t\t),\n";
    $forumcache   = "\$forumcache='\n$forumcache';\n\$cmscache='\n$cmscache';";
    writeover(D_P."data/bbscache/forumcache.php","<?php\n".$forumcache."\n?>");
    writeover(D_P.'data/bbscache/forum_cache.php',"<?php\n".$forum_cache."\n?>");

这就是个变相的serialize.

dz参见:include/cache.func.php
function writetocache($script, $cachenames, $cachedata = '', $prefix = 'cache_') {
    if(is_array($cachenames) && !$cachedata) {
        foreach($cachenames as $name) {
            $cachedata .= getcachearray($name);
        }
    }
    if(@$fp = fopen("$dir$prefix$script.php", 'w')) {
        fwrite($fp, "<?php\n//Discuz! cache file, DO NOT modify me!\n".
            "//Created on ".date("M j, Y, G:i")."\n\n$cachedata?>");

(无关代码已去掉)

2.2 单纯的文件缓存:
将所存变量序列化后得到缓存文本.
(当然,如果你知道a是字符串/数字的话你就不用序列化了)
简单例子:
写入:file_put_content('a',serialize($a));
读取:$a=unserialize(file_get_content('a'));

2.2.1 /dev/shm
基于内存(shmod)的文件缓存,效率能高不少.方法实际上一样.
只不过修改了保存的位置.

小提示:你可以把/dev/shm符号链接到你的缓存目录.

2.2.2 nfs
可以做为分布式缓存的一个基础.但是相对来说就要耗网络资源了.

2.2.3 memcache
同样是分布式,它就好的多了.
由于使用者不太多这里不多讨论.

2.2.4 数据库:
数据库实际也可以做为缓存的一种方式,但是数量较大时工作的就不太好了.

2.3 Session
有了缓存手段,自然可以存不少东西.
就比如:session

使用数据库来保存session,奶瓶已经在另一篇文章中讨论过:(http://www.phpx.com/happy/thread-121049-1-1.html)
另外可以使用现成的session_handler代码.这都是可以找到的.
这里推荐使用mysql(innodb)或sqlite.

nfs保存session有很大的网络访问的开销.这一点相当的不好.
memcache虽然解决了这个问题,但是清理更复杂.
所以保存session不推荐他们.

讨论完程序手段,下面就轮到服务器软件中的缓存

3 服务器手段:
这里只举一例:
apache,mod_gzip
mod_deflate是在内存中进行的缓存,与mod_gzip类似,这里不做过多讨论.
mod_gzip有预压缩机制(可选).但是部分浏览器(nc4,ie5等)不能正确的处理压缩的内容.
(参见:http://support.microsoft.com/default.aspx?scid=kb;en-us;823386&Product=ie600)

虽然使用这部分浏览器的人不太多,但是如果为了安全起见,最好还是做好这方面的工作.

联系作者fcicq: fcicqbbs at gmail dot com.
如果有问题,或者错误,均可联系。
版权声明:原创
最后一句:喜悦首发,严禁转帖
小广告:欢迎访问偶的blog,征集友情链接中...可邮件联系.

                        fcicq 2006.8.6





2006-8-6 09:54 AM#1
查看资料  访问主页  Blog  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[广告]: 代充Paypal帐号美元
还有一个客户端的缓存
http://www.phpx.com/happy/thread-121592-1-1.html




五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-8-6 12:00 PM#2
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 大家好
行了....
一气呵成的东西.赶紧加亮.





2006-8-6 12:02 PM#3
查看资料  访问主页  Blog  发短消息  顶部
 
Jaycn
注册会员
Rank: 2



UID 69863
精华 0
积分 189
帖子 204
金钱 189 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-3-19
状态 离线
[推荐阅读] 缩略图问题?
最后一句:喜悦首发,严禁转帖
小广告:欢迎访问偶的blog,征集友情链接中...可邮件联系.

可以联系我,我的BLOG交换连接,我的GG PR值为3,才开了三个月^_^

流星下的天空:www.onlywap.cn




流星下的天空,一个专注WAP的网站,J2ME技术 http://www.onlywap.cn
2006-8-7 07:51 PM#4
查看资料  发短消息  顶部
 
菜鸟也要有理想
中级会员
Rank: 3Rank: 3
一般会员



UID 65342
精华 0
积分 439
帖子 426
金钱 439 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-8-1
状态 离线
[推荐阅读] 国际域名39元/个,PHP虚拟主机价格便宜
DISCUZ的缓存最好用啊
哈哈
2006-8-7 09:53 PM#5
查看资料  发短消息  顶部
 
lfox (lfox)
高级会员
Rank: 4
资深会员



UID 17785
精华 1
积分 571
帖子 561
金钱 561 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2002-11-17
状态 离线
[推荐阅读] 传奇故事
好贴,真是好贴
2006-8-8 07:21 PM#6
查看资料  访问主页  发短消息  QQ  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 低薪请PHPEER两名。
谢楼上的....4楼请联系fcicqbbs at gmail dot com




2006-8-8 09:34 PM#7
查看资料  访问主页  Blog  发短消息  顶部
 

注册会员
Rank: 2



UID 76763
精华 0
积分 90
帖子 70
金钱 90 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-7-20
状态 离线
[推荐阅读] 网站在线支付系统的流程?
2 php:
由于php没有类似application这样的全局变量.

//PHP的application其实也不是没有了,就看你怎么理解了,比如shmop,可以把少量的内容如配置文件放入内存中,
也是很快的了,我们游戏用来做选择大区的配置文件就是他


如果只是小量的应用,写文件这种缓存都没大影响
但是如果并发请求多时都写文件就会出现问题,成功率不见得高
效果也不见得好
毕竟读写IO还是很占资源的,尤其是并发多时,更是明显

所以还是memcached好用滴
2006-8-10 10:43 AM#8
查看资料  发短消息  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] smarty实例教程〔转〕1
上面讨论了,这些方法不都是模拟出来的?所以这话偶觉得没什么错误.只看半句肯定不对.....




2006-8-10 10:49 AM#9
查看资料  访问主页  Blog  发短消息  顶部
 

注册会员
Rank: 2



UID 76763
精华 0
积分 90
帖子 70
金钱 90 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-7-20
状态 离线
[推荐阅读] smarty实例教程〔转〕2
我不是这个意思:

只是说有时和从事ASP或者JSP的人一起讨论问题时,他们会诧异:PHP没有APPLICATION?
搞的倍没面子

我的意思是PHP其实是有,只不过....
2006-8-10 10:58 AM#10
查看资料  发短消息  顶部
 15  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.026802 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP