天天看点

php提高网站性能之PHP数据缓存技术详解

数据缓存是web开发中常用的一种性能优化方法。目前主要文件缓存或者数据库缓存两种形式,数据库缓存数据库不是什么不可能的事情,的确也是很好很重要的。我认为传统数据库主要是从业务层、模块设计等方面来考虑的,而缓存数据库主要是从实现层来设计的,主要是为了缓存常用的多表查询之类的。这里主要将的是文件缓存,网上很多资料了,这里我转载了一些原理资料。

    Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。

 1

php提高网站性能之PHP数据缓存技术详解

function load_data($id,$cache_lifetime) {     

 2

php提高网站性能之PHP数据缓存技术详解

 3

php提高网站性能之PHP数据缓存技术详解

// the return data     

 4

php提高网站性能之PHP数据缓存技术详解

 5

php提高网站性能之PHP数据缓存技术详解

$data = array();     

 6

php提高网站性能之PHP数据缓存技术详解

 7

php提高网站性能之PHP数据缓存技术详解

// make cache filename     

 8

php提高网站性能之PHP数据缓存技术详解

 9

php提高网站性能之PHP数据缓存技术详解

$cache_filename = ‘cache_‘.$id.‘.php‘;     

10

php提高网站性能之PHP数据缓存技术详解

11

php提高网站性能之PHP数据缓存技术详解

// check cache file‘s last modify time     

12

php提高网站性能之PHP数据缓存技术详解

13

php提高网站性能之PHP数据缓存技术详解

$cache_filetime = filemtime($cache_filename);     

14

php提高网站性能之PHP数据缓存技术详解

15

php提高网站性能之PHP数据缓存技术详解

if (time() - $cache_filetime <= $cache_lifetime) {     

16

php提高网站性能之PHP数据缓存技术详解

17

php提高网站性能之PHP数据缓存技术详解

//** the cache is not expire     

18

php提高网站性能之PHP数据缓存技术详解

19

php提高网站性能之PHP数据缓存技术详解

include($cache_filename);     

20

php提高网站性能之PHP数据缓存技术详解

21

php提高网站性能之PHP数据缓存技术详解

} else {     

22

php提高网站性能之PHP数据缓存技术详解

23

php提高网站性能之PHP数据缓存技术详解

//** the cache is expired     

24

php提高网站性能之PHP数据缓存技术详解

25

php提高网站性能之PHP数据缓存技术详解

// load data from database     

26

php提高网站性能之PHP数据缓存技术详解

27

php提高网站性能之PHP数据缓存技术详解

// 

php提高网站性能之PHP数据缓存技术详解

28

php提高网站性能之PHP数据缓存技术详解

29

php提高网站性能之PHP数据缓存技术详解

while ($dbo->nextRecord()) {     

30

php提高网站性能之PHP数据缓存技术详解

31

php提高网站性能之PHP数据缓存技术详解

// $data[] = 

php提高网站性能之PHP数据缓存技术详解

32

php提高网站性能之PHP数据缓存技术详解

33

php提高网站性能之PHP数据缓存技术详解

}     

34

php提高网站性能之PHP数据缓存技术详解

35

php提高网站性能之PHP数据缓存技术详解

// format the data as a php file     

36

php提高网站性能之PHP数据缓存技术详解

37

php提高网站性能之PHP数据缓存技术详解

$data_cache = "    

38

php提高网站性能之PHP数据缓存技术详解

39

php提高网站性能之PHP数据缓存技术详解

while (list($key, $val) = each($data)) {    

40

php提高网站性能之PHP数据缓存技术详解

41

php提高网站性能之PHP数据缓存技术详解

$data_cache .= "$data[‘$key‘]=array(‘";    

42

php提高网站性能之PHP数据缓存技术详解

43

php提高网站性能之PHP数据缓存技术详解

$data_cache .= "‘NAME‘=>"".qoute($val[‘NAME‘])."\","     

44

php提高网站性能之PHP数据缓存技术详解

45

php提高网站性能之PHP数据缓存技术详解

$data_cache .= "‘VALUE‘=>\"".qoute($val[‘VALUE‘])."\""     

46

php提高网站性能之PHP数据缓存技术详解

47

php提高网站性能之PHP数据缓存技术详解

$data_cache .= ";);";     

48

php提高网站性能之PHP数据缓存技术详解

49

php提高网站性能之PHP数据缓存技术详解

50

php提高网站性能之PHP数据缓存技术详解

51

php提高网站性能之PHP数据缓存技术详解

$data_cache = "?>";     

52

php提高网站性能之PHP数据缓存技术详解

53

php提高网站性能之PHP数据缓存技术详解

// save the data to the cache file     

54

php提高网站性能之PHP数据缓存技术详解

55

php提高网站性能之PHP数据缓存技术详解

if ($fd = fopen($cache_filename,‘w+‘)) {     

56

php提高网站性能之PHP数据缓存技术详解

57

php提高网站性能之PHP数据缓存技术详解

fputs($fd,$data_cache);     

58

php提高网站性能之PHP数据缓存技术详解

59

php提高网站性能之PHP数据缓存技术详解

fclose($fd);     

60

php提高网站性能之PHP数据缓存技术详解

61

php提高网站性能之PHP数据缓存技术详解

62

php提高网站性能之PHP数据缓存技术详解

63

php提高网站性能之PHP数据缓存技术详解

64

php提高网站性能之PHP数据缓存技术详解

65

php提高网站性能之PHP数据缓存技术详解

return $data;     

66

php提高网站性能之PHP数据缓存技术详解

67

php提高网站性能之PHP数据缓存技术详解

68

php提高网站性能之PHP数据缓存技术详解

69

php提高网站性能之PHP数据缓存技术详解

?>    

 适用情况:

    1.数据相对比较稳定,主要是读取操作。

    2.文件操作要比数据库操作快。

    3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。

    4.Web/DB分离结构或者多Web单DB结构。

////////////补充

php提高网站性能之PHP数据缓存技术详解

<?php     

php提高网站性能之PHP数据缓存技术详解

function cache_isvalid($cacheid,$expire=300) {     

php提高网站性能之PHP数据缓存技术详解

@clearstatcache();     

php提高网站性能之PHP数据缓存技术详解

if (!@file_exists($cacheid)) return false;     

php提高网站性能之PHP数据缓存技术详解

if (!($mtime=@filemtime($cacheid))) return false;     

php提高网站性能之PHP数据缓存技术详解

$nowtime=mktime();     

php提高网站性能之PHP数据缓存技术详解

if (($mtime+$expire)<$nowtime) {     

php提高网站性能之PHP数据缓存技术详解

return false;     

php提高网站性能之PHP数据缓存技术详解

}else{     

php提高网站性能之PHP数据缓存技术详解

return true;     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

function cache_write($cacheid,$cachecontent) {     

php提高网站性能之PHP数据缓存技术详解

$retry=100;     

php提高网站性能之PHP数据缓存技术详解

for ($i=0;$i<$retry;$i++) {     

php提高网站性能之PHP数据缓存技术详解

$ft=@fopen($cacheid,"wb");     

php提高网站性能之PHP数据缓存技术详解

if ($ft!=false) break;     

php提高网站性能之PHP数据缓存技术详解

if ($i==($retry-1)) return false;     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

@flock($ft,LOCK_UN);     

php提高网站性能之PHP数据缓存技术详解

@flock($ft,LOCK_EX|LOCK_NB);     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

$tmp=@fwrite($ft,$cachecontent);     

php提高网站性能之PHP数据缓存技术详解

if ($tmp!=false) break;     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

@fclose($ft);     

php提高网站性能之PHP数据缓存技术详解

@chmod($cacheid,0777);     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

function cache_fetch($cacheid) {     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

$ft=@fopen($cacheid,"rb");     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

$cachecontent='';     

php提高网站性能之PHP数据缓存技术详解

while (!@feof($ft)) {     

php提高网站性能之PHP数据缓存技术详解

$cachecontent.=@fread($ft,4096);     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

return $cachecontent;     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

function cache_clear_expired($cachedirname,$expire=300) {     

php提高网站性能之PHP数据缓存技术详解

$cachedir=@opendir($cachedirname);     

php提高网站性能之PHP数据缓存技术详解

while (false!==($userfile=@readdir($cachedir))) {     

php提高网站性能之PHP数据缓存技术详解

if ($userfile!="." and $userfile!=".." and substr($userfile,-4,4)=='.htm') {     

php提高网站性能之PHP数据缓存技术详解

$cacheid=$cachedirname.'/'.$userfile;     

php提高网站性能之PHP数据缓存技术详解

if (!cache_isvalid($cacheid,$expire)) @unlink($cacheid);     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

@closedir($cachedir);     

php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解
php提高网站性能之PHP数据缓存技术详解

?>