>백엔드 개발 >PHP 튜토리얼 >PHP 웹페이지 캐싱 기술의 장점과 코드 예시에 대한 자세한 설명

PHP 웹페이지 캐싱 기술의 장점과 코드 예시에 대한 자세한 설명

coldplay.xixi
coldplay.xixi앞으로
2020-08-01 16:25:022503검색

PHP 웹페이지 캐싱 기술의 장점과 코드 예시에 대한 자세한 설명

정적 프런트엔드: 동적 페이지를 구문 분석하여 정적 페이지로 저장

파일 캐시: 쿼리 결과를 파일, XML로 저장

메모리 캐시: memcache

php 캐시: XCache, eaccelerator 등

Memcache 고성능 분산 메모리 개체 캐시 시스템으로 메모리에 통일된 거대한 해시 테이블을 유지하여 이미지, 동영상, 파일, 데이터베이스 검색 결과 등 다양한 형식의 데이터를 저장할 수 있습니다. 간단히 말하면, 데이터가 메모리로 호출된 다음 메모리에서 읽혀지므로 읽기 속도가 크게 향상됩니다. Memcache는 원래 LiveJournal 액세스 속도를 높이기 위해 개발되었으며 나중에 많은 대규모 웹사이트에서 채택되었습니다. Memcached는 하나 이상의 서버에서 데몬으로 실행되며 언제든지 클라이언트로부터 연결 및 작업을 수신합니다.

XCache는 오픈 소스 opcode 캐시/최적화 프로그램입니다. 즉, 컴파일된 PHP 데이터를 공유 메모리에 버퍼링하여 반복적인 컴파일 프로세스를 방지하고 버퍼를 직접 Zone 컴파일된 코드에 사용할 수 있습니다. 속도를 높이세요. 일반적으로 페이지 생성 속도가 2~5배 증가하여 서버 부하가 줄어듭니다.

************************ ***** ****************************************************** *********************************************** *** ***************************

1. 범용 캐싱 기술:

데이터 캐싱: 여기서 언급되는 데이터 캐싱은 다음을 참조합니다. 데이터베이스 쿼리 PHP 캐시 메커니즘은 페이지에 액세스할 때마다 해당 캐시 데이터가 있는지 먼저 감지하고, 해당 데이터가 존재하지 않으면 데이터베이스에 연결하여 데이터를 얻은 다음 쿼리 결과를 직렬화하여 저장합니다. 쿼리 결과는 캐시 테이블이나 파일에서 직접 가져옵니다.

가장 널리 사용되는 예는 Discuz의 검색 기능으로, 다음에 동일한 키워드를 검색할 때 결과 ID를 테이블에 캐시하고 캐시 테이블을 먼저 검색하는 기능입니다.

일반적인 방법은 여러 개의 테이블이 연관되어 있을 때 첨부된 테이블의 내용을 배열로 생성하고 필요할 경우 배열을 하나만 분해한다는 장점이 있습니다. 테이블을 읽을 수 있지만 데이터를 동기화하는 데 더 많은 단계가 필요하다는 단점이 있습니다. 데이터베이스는 항상 속도를 위해 병목 현상이 발생합니다.

2. 페이지 캐싱:

페이지에 액세스할 때마다 해당 캐시된 페이지 파일이 존재하는지 먼저 감지하고, 존재하지 않는 경우 데이터베이스에 연결하여 데이터를 가져오고 페이지를 표시합니다. 캐시된 페이지 파일을 동시에 저장하므로 다음에 방문할 때 페이지 파일이 재생됩니다. (템플릿 엔진과 인터넷의 일부 일반적인 PHP 캐싱 메커니즘 클래스에는 일반적으로 이 기능이 있습니다)

3. 시간 트리거 캐싱:

파일이 존재하는지, 타임스탬프가 설정된 만료 시간보다 짧은지 확인하세요. 수정 타임스탬프가 현재 타임스탬프보다 이후입니다. 타임스탬프에서 만료 타임스탬프를 뺀 값이 더 크면 캐시를 사용하고, 그렇지 않으면 캐시를 업데이트합니다.

4. 콘텐츠 트리거 캐싱:

  데이터가 삽입되거나 업데이트되면 PHP 캐시 메커니즘이 강제로 업데이트됩니다.

5. 정적 캐시:

여기서 언급하는 정적 캐시는 HTML이나 XML 등의 텍스트 파일을 직접 생성하고 업데이트가 있을 때 다시 생성하는 정적 캐시를 의미합니다. 이것은 말하지 않습니다.

위 내용은 코드 수준 솔루션입니다. 다른 프레임워크를 직접 CP하고 변경하기에는 너무 게으릅니다. 내용도 비슷하고, 여러 가지 방법으로 사용할 수 있지만, 다음 내용은 서버입니다. - 비코드 레벨, 이를 달성하려면 여러 당사자의 협력이 필요합니다

6. 메모리 캐시:

  Memcached는 데이터베이스를 줄이는 데 사용되는 고성능 분산 메모리 객체 PHP 캐싱 메커니즘 시스템입니다. 동적 애플리케이션에 로드하면 액세스 속도가 향상됩니다.

7. PHP 버퍼:

eaccelerator, apc, phpa, xcache에 대해서는 언급하지 않겠습니다. OK

8. MYSQL 캐시:

이것도 비코드 수준으로 간주됩니다. 아래의 실행 시간을 보면 0.09xxx 등이 역방향 프록시 기반입니다. :

 예: Nginx, SQUID, mod_proxy(apache2 이상은 mod_proxy와 mod_cache로 구분됩니다.)

10. DNS 폴링:

 

BIND는 오픈 소스 DNS 서버 소프트웨어입니다. . 직접 검색해 보세요. 이 항목이 존재한다는 것만 알아두세요.

chinacache와 같은 일부 대형 웹사이트에서는 간단히 말해서 다중 서버인 것으로 알고 있습니다. 동일한 페이지나 파일이 서로 다른 서버에 캐시되어 북쪽과 남쪽에 따라 자동으로 해당 서버로 파싱됩니다.

PHP 웹페이지 캐싱 예제

  • ob_start():页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中;
  • ob_get_contents():用来获取页面缓存中的内容,获取到以后呢,我们就可以想怎么处理这些内容都行了,过滤字段啦,匹配内容啦,都可以~~~ :)
  • ob_end_flush():表示页面缓存结束。并且经我验证,缓存的内容将输出到当前页面上,也就是可以显示缓存内容。

用此三个php函数,就可以实现强大的功能。如果数据库查询量较大,可以用cache来解决这个问题。

首先,设定过期时间,如果要求缓存文件2个小时过期,就可以设定cache_time为3600*2;通过filectime()来获取缓存文件的创建时间(或 filemtime()获取修改时间),如果当前时间跟文件的创建时间超过限定的过期时间,就可以通过上面三个函数,首先从数据库中取出数据,然后开始缓存ob_start(),然后把要生成的页面的html代码写在缓存中,缓存结束后通过ob_get_contents()获取到缓存的内容,然后通过fwrite把缓存内容写到静态页面html。

如果未过期,直接读取cache中的静态页面即可,避免了大量的数据库访问。

<?php
$_time =10;
$dir="D:\\php\\";
 
function cache_start($_time, $dir)
{
 $cachefile = $dir.&#39;/&#39;.sha1($_SERVER[&#39;REQUEST_URI&#39;]).&#39;.html&#39;;
 $cachetime = $_time;
 ob_start();
 if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime))
 {
  include($cachefile);
  ob_end_flush();
  exit;
 }
}
 
function cache_end($dir)
{
 $cachefile = $dir.&#39;/&#39;.sha1($_SERVER[&#39;REQUEST_URI&#39;]).&#39;.html&#39;;
 $fp = fopen($cachefile, &#39;w&#39;);
 fwrite($fp, ob_get_contents());
 fclose($fp);
 ob_end_flush();
}
 
cache_start($_time, $dir);
//以下是输出的内容,放在cache_start和cache_end两个方法之间
for ($i=0;$i<5;$i++)
{
 echo $i;
 sleep(1);
}
cache_end($dir);
?>

相关学习推荐:PHP编程从入门到精通

위 내용은 PHP 웹페이지 캐싱 기술의 장점과 코드 예시에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제