简单的数据缓存技术[转一] as\K(c9
{;(g[H=q;
简单的数据缓存技术 ~bWWu`h
Z$m2rZ#
近来做了一阵子程序性能的优化工作,有个比较有意思的想法,想提出来和大家交流一下。 JjTzq2'%
Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。 pi l*/&pB
Tdmo'"m8z_
<? ,%b1 ]zZQ
// load data with cache r|H!s,
function load_data($id,$cache_lifetime) { 3TvhOC>yG
Fi3(glgd-
// the return data [sO<6?LY
$data = array(); VL!kX``^F
rgvc5p
// make cache filename "a`0w9Mm}
$cache_filename = ‘cache_‘.$id.‘.php‘; *,XJN_DKj
WSB|-Qj}W
// check cache file‘s last modify time M(]|}%
$cache_filetime = filemtime($cache_filename); n)?F
9Wap
u1|Y;*
if (time() - $cache_filetime <= $cache_lifetime) { 2T2#HP
//** the cache is not expire WZ
V*J&
include($cache_filename); \#oV<MR
} else { Ckl]fy@D}
//** the cache is expired rM~IF+f0XD
wqoN@d
// load data from database y7G|P~td
// ... ]O(HZD%
while ($dbo->nextRecord()) { S?z j&XY3
// $data[] = ... VA
r?teY
} uKAHJ$%
Kmf-l*7}
// format the data as a php file WxP4{T* <
$data_cache = "<?\r\n"; ="TOa"Zk
while (list($key, $val) = each($data)) { jw%FZ
$data_cache .= "\$data[‘$key‘]=array(‘"; #FDu4xi
$data_cache .= "‘NAME‘=>\"".qoute($val[‘NAME‘])."\"," P9cI{RI
$data_cache .= "‘VALUE‘=>\"".qoute($val[‘VALUE‘])."\"" z^GGJu%vjr
$data_cache .= ");\r\n"; {Ll8@'5
} x)sDf!d4bi
$data_cache = "?>\r\n"; H&Lbdu~E
W:( Usy
// save the data to the cache file *l8vCa9Y
if ($fd = fopen($cache_filename,‘w+‘)) { [x()^{;2
fputs($fd,$data_cache); d_|v=^;
fclose($fd); F-OZIo
} P>,D$-3
} NU\t3JaR
return $data; (8X8<>w~
} KNyD}1
?> T-cVM>u\D
GKDG5u;
适用情况: rW>'2m6HU
1.数据相对比较稳定,主要是读取操作。 >0okb3+
2.文件操作要比数据库操作快。 gwjv&.T6^
3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。 )Zr0_b"V:e
4.Web/DB分离结构或者多Web单DB结构。 RX|&