简单的数据缓存技术[转一] J0R{|]W8
)hO%W|
简单的数据缓存技术 a-,*iK{_u
P8dMfD*"E
近来做了一阵子程序性能的优化工作,有个比较有意思的想法,想提出来和大家交流一下。 s,[I_IiPf
Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。 -nC&t~sD
LA\3 ,Uv
<? V(ww
F
// load data with cache l6WEx
-d
function load_data($id,$cache_lifetime) { DIQ30(MS
DPW^OgL;
// the return data Lc}hjK
$data = array(); L7rr/D
5TuwXz1v
// make cache filename e#mf{1&
$cache_filename = ‘cache_‘.$id.‘.php‘; ^znUf4N1
jmq^98jB
// check cache file‘s last modify time &glh >9:G
$cache_filetime = filemtime($cache_filename); Pz2Q]}(w
~gZ1*8 s`
if (time() - $cache_filetime <= $cache_lifetime) { [olSgq!3
//** the cache is not expire CXoiA"P
include($cache_filename); WQVU 82b*
} else { l
7dm@S
//** the cache is expired :EHk]Hkz
DpmAB.
// load data from database oO?+2pTQV
// ... Q!IqvmO
while ($dbo->nextRecord()) { lW#2 ox
// $data[] = ... Y9#dAI[Gce
} 1:T"jsWw
MNe/H\
// format the data as a php file ZyNgG9JL]
$data_cache = "<?\r\n"; O_2o/
while (list($key, $val) = each($data)) { m2(}$z3e
$data_cache .= "\$data[‘$key‘]=array(‘"; Ucy=I$"
$data_cache .= "‘NAME‘=>\"".qoute($val[‘NAME‘])."\"," Q
Rr9|p{
$data_cache .= "‘VALUE‘=>\"".qoute($val[‘VALUE‘])."\"" [>p!*%m
$data_cache .= ");\r\n"; (
EJ1g^|"
} ;5\'PrE
$data_cache = "?>\r\n"; mGDc,C=5:
DcaKGjp
// save the data to the cache file |;Jt*
_
if ($fd = fopen($cache_filename,‘w+‘)) { /O.q4p
fputs($fd,$data_cache); R{A$|Ipaq
fclose($fd); JleClB(2n/
} _IU5HT}2
} 6j{ynt
return $data; *zweZG8:
} K-Pcew^?
?> 1qn/*9W}=
X.#9[3U+
适用情况: FPK=Tr:b
1.数据相对比较稳定,主要是读取操作。 VK*H1EH1
2.文件操作要比数据库操作快。 .tfal9
3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。 E x_dqko
4.Web/DB分离结构或者多Web单DB结构。 &