> 백엔드 개발 > PHP 튜토리얼 > PHP의 캐시 분류 데이터베이스 캐시

PHP의 캐시 분류 데이터베이스 캐시

墨辰丷
풀어 주다: 2023-03-30 10:04:01
원래의
3533명이 탐색했습니다.

이 글은 주로 PHP의 캐시 분류 데이터베이스 캐시를 소개합니다. 관심 있는 친구들이 참고하면 좋을 것 같습니다.

페이지 캐시 클래스

코드는 다음과 같습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

<?php 

/*include( "cache.php" ); 

   

$cache = new cache(30); 

$cache->cacheCheck(); 

   

echo date("Y-m-d H:i:s"); 

   

$cache->caching(); */

class cache { 

 //缓存目录 

 var $cacheRoot    = "./cache/"

 //缓存更新时间秒数,0为不缓存 

 var $cacheLimitTime  = 3;

 //缓存文件名 

 var $cacheFileName  = ""

 //缓存扩展名 

 var $cacheFileExt   = "php"

    

 /* 

  * 构造函数 

  * int $cacheLimitTime 缓存更新时间 

  */ 

 function cache( $cacheLimitTime ) { 

  if( intval( $cacheLimitTime ) )  

   $this->cacheLimitTime = $cacheLimitTime

  $this->cacheFileName = $this->getCacheFileName(); 

  ob_start(); 

 

    

 /* 

  * 检查缓存文件是否在设置更新时间之内 

  * 返回:如果在更新时间之内则返回文件内容,反之则返回失败 

  */ 

 function cacheCheck(){ 

  if( file_exists( $this->cacheFileName ) ) { 

   $cTime = $this->getFileCreateTime( $this->cacheFileName ); 

   if( $cTime + $this->cacheLimitTime > time() ) { 

    echo file_get_contents( $this->cacheFileName ); 

    ob_end_flush(); 

    exit

   

  

  return false; 

 

    

 /* 

  * 缓存文件或者输出静态 

  * string $staticFileName 静态文件名(含相对路径) 

  */ 

 function caching( $staticFileName = "" ){ 

  if( $this->cacheFileName ) { 

   $cacheContent = ob_get_contents(); 

   //echo $cacheContent; 

   ob_end_flush(); 

    

   if( $staticFileName ) { 

     $this->saveFile( $staticFileName, $cacheContent ); 

   

    

   if( $this->cacheLimitTime ) 

    $this->saveFile( $this->cacheFileName, $cacheContent ); 

  

 

    

 /* 

  * 清除缓存文件 

  * string $fileName 指定文件名(含函数)或者all(全部) 

  * 返回:清除成功返回true,反之返回false 

  */ 

 function clearCache( $fileName = "all" ) { 

  if( $fileName != "all" ) { 

   $fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt; 

   if( file_exists( $fileName ) ) { 

    return @unlink( $fileName ); 

   }else return false; 

  

  if ( is_dir( $this->cacheRoot ) ) { 

   if ( $dir = @opendir( $this->cacheRoot ) ) { 

    while ( $file = @readdir( $dir ) ) { 

     $check = is_dir( $file ); 

     if ( !$check

     @unlink( $this->cacheRoot . $file ); 

    

    @closedir( $dir ); 

    return true; 

   }else

    return false; 

   

  }else

   return false; 

  

 

    

 /* 

  * 根据当前动态文件生成缓存文件名 

  */ 

 function getCacheFileName() { 

  return $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt; 

 

    

 /* 

  * 缓存文件建立时间 

  * string $fileName  缓存文件名(含相对路径) 

  * 返回:文件生成时间秒数,文件不存在返回0 

  */ 

 function getFileCreateTime( $fileName ) { 

  if( ! trim($fileName) ) return 0; 

    

  if( file_exists( $fileName ) ) {  

   return intval(filemtime( $fileName )); 

  }else return 0; 

 

    

 /* 

  * 保存文件 

  * string $fileName 文件名(含相对路径) 

  * string $text   文件内容 

  * 返回:成功返回ture,失败返回false 

  */ 

 function saveFile($fileName, $text) { 

  if( ! $fileName || ! $text ) return false; 

    

  if( $this->makeDir( dirname( $fileName ) ) ) { 

   if( $fp = fopen( $fileName, "w" ) ) { 

    if( @fwrite( $fp, $text ) ) { 

     fclose($fp); 

     return true; 

    }else

     fclose($fp); 

     return false; 

    

   

  

  return false; 

 

    

 /* 

  * 连续建目录 

  * string $dir 目录字符串 

  * int $mode  权限数字 

  * 返回:顺利创建或者全部已建返回true,其它方式返回false 

  */ 

 function makeDir( $dir, $mode = "0777" ) { 

  if( ! $dir ) return 0; 

  $dir = str_replace( "", "/", $dir ); 

     

  $mdir = ""

  foreach( explode( "/", $dir ) as $val ) { 

   $mdir .= $val."/"

   if( $val == ".." || $val == "." || trim( $val ) == "" ) continue

      

   if( ! file_exists( $mdir ) ) { 

    if(!@mkdir( $mdir, $mode )){ 

     return false; 

    

   

  

  return true; 

 

?>

로그인 후 복사

위의 사용법은 페이지에 액세스할 때마다 해당 캐시된 페이지 파일이 있는지 여부를 먼저 감지합니다. 존재하는 경우 데이터베이스에 연결하여 데이터를 가져오고 페이지를 표시하는 동시에 캐시된 페이지 파일을 생성하므로 다음에 방문할 때 페이지 파일이 역할을 수행합니다. (템플릿 엔진이나 인터넷에서 흔히 볼 수 있는 일부 캐시 클래스에는 이 기능이 일반적으로 있습니다.)
메모리 캐시로 간주되는 Memcache 캐시를 소개하겠습니다.
코드는 다음과 같습니다

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

$memcache = new Memcache;

$memcache->connect(&#39;localhost&#39;, 11211) or die ("Could not connect");

$version = $memcache->getVersion();

echo "Server&#39;s version: ".$version."n";

$tmp_object = new stdClass;

$tmp_object->str_attr = &#39;test&#39;;

$tmp_object->int_attr = 123;

$memcache->set(&#39;key&#39;, $tmp_object, false, 10) or die ("Failed to save data at the server");

echo "Store data in the cache (data will expire in 10 seconds)n";

$get_result = $memcache->get(&#39;key&#39;);

echo "Data from the cache:n";

var_dump($get_result);

?>

로그인 후 복사

Memcached는 동적 애플리케이션에서 데이터베이스 부하를 줄이고 액세스 속도를 향상시키는 데 사용되는 고성능 분산 메모리 개체 캐싱 시스템입니다.

요약: 위 내용이 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장 사항:

PHP 배경 기반 Android 뉴스 브라우징 클라이언트 구현

php는 ffmpeg를 사용하여 동영상에 텍스트 자막을 추가하는 방법을 구현합니다.

php 배열에서 값을 무작위로 선택하는 방법과 간단한 예

위 내용은 PHP의 캐시 분류 데이터베이스 캐시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿