1. 전체 페이지 정적 캐싱
은 모든 페이지가 HTML 정적 페이지로 생성된다는 의미입니다. 정적 페이지는 PHP 서버 구문 분석 과정을 거치지 않고 사용자가 방문할 때 직접 액세스됩니다. 이 방법은 dedecs와 같은 CMS 시스템에서 더 일반적입니다.
보다 일반적인 구현 방법은 출력 캐싱을 사용하는 것입니다:
Ob_start() ******要运行的代码******* $content = Ob_get_contents(); ****将缓存内容写入html文件***** Ob_end_clean();
2. 부분 페이지 캐싱
이 방법은 자주 변경되는 페이지의 다른 부분을 캐시하는 것입니다. 부분은 정적으로 캐시되지만, 자주 변경되는 블록은 캐시되지 않고 최종적으로 함께 결합되어 표시됩니다. 이는 ob_get_contents와 유사한 방법을 사용하여 구현되거나 ESI와 같은 페이지 조각 캐싱 전략을 사용하여 상대적으로 캐싱을 동적으로 만들 수 있습니다. 페이지의 정적 조각
모든 웹 웹사이트의 콘텐츠는 지속적으로 업데이트되고 변경되지만 이는 이 웹사이트의 콘텐츠가 동적 콘텐츠라는 의미는 아닙니다. 실제로 동적 콘텐츠는 사용자가 매번 웹사이트의 콘텐츠를 의미합니다. 동일한 링크를 클릭하면 가져온 콘텐츠는 일반적인 ASP, JSP 등의 웹 서버 응용 프로그램에 의해 생성됩니다. 이에 따라 정적 콘텐츠는 일반적으로 텍스트, 이미지 및 멀티미디어로 구성되며 사용자가 클릭할 때마다 생성됩니다. 링크는 본질적으로 변경되지 않습니다. 동적 콘텐츠 캐싱을 해결하는 최신 기술은 ESI 기술을 통해 웹사이트의 콘텐츠를 디자인하는 것입니다.
ESI 기술의 작동 원리
동적으로 생성된 콘텐츠는 사용자에게 풍부하고 흥미로운 페이지를 제공할 수 있으며 웹 사이트 개발자도 관련 콘텐츠를 보다 쉽고 유연하게 제어할 수 있지만 이러한 편리함을 즐기기 전에 동시에 또한 웹사이트 데이터베이스와 애플리케이션 서버의 처리 부담도 증가합니다. 웹 사이트 방문 횟수가 증가하면 하드웨어와 데이터베이스에 대한 투자가 매우 커집니다. 그럼에도 불구하고 여전히 페이지에 심각한 지연이 발생하거나 심지어 액세스 실패가 발생할 수 있습니다.
동적으로 생성된 콘텐츠에 대한 사용자의 접근이 느린 근본적인 이유는 먼저, 사용자의 요청에 따라 애플리케이션 서버의 해당 소프트웨어 모듈에 할당됩니다. 소프트웨어 모듈은 어떤 종류의 데이터를 데이터베이스에서 사용자에게 추출해야 하는지 계산을 통해 결정해야 하며, 그런 다음 해당 데이터가 데이터베이스에서 추출되어 정의된 형식으로 사용자에게 전달됩니다. 이러한 긴 프로세스로 인해 사용자 액세스 속도가 느려지고 서버의 로드가 증가합니다.
실제 환경에서 동적으로 생성된 페이지에는 자주 변경되거나 개인화되는 소량의 콘텐츠만 있을 수 있습니다. 기존 캐시 서버의 경우 이러한 소량의 콘텐츠로 인해 페이지의 적시성을 보장할 수 있습니다. 동적 콘텐츠는 전체 페이지가 캐시되는 것을 방지합니다. ESI(Edge Side include)는 간단한 마크업 언어를 사용하여 가속화할 수 있거나 가속화할 수 없는 웹 페이지의 콘텐츠 조각을 설명합니다. 서버는 전체 웹 페이지를 사용자에게 보내기 전에 서로 다른 작은 부분을 동적으로 결합할 수 있습니다. 이러한 제어를 통해 서버에서 전체 페이지를 크롤링하는 횟수를 효과적으로 줄일 수 있으며, 원본 서버에서 캐시할 수 없는 소수의 조각만 추출하므로 원본 서버의 부하를 효과적으로 줄일 수 있습니다. 감소하고 사용자 액세스의 응답 시간을 향상시킬 수 있습니다.
ESI는 개발자가 해당 캐시 서버를 통해 캐싱 속도를 높이기 위해 콘텐츠 조각을 표시하는 데 사용할 수 있는 간단한 마크업 언어입니다. 동시에 ESI는 원본 서버가 캐시 서버에 캐시된 콘텐츠를 관리하는 것을 실현하고 웹 사이트의 콘텐츠 제어 기능을 향상시킬 수 있는 일련의 콘텐츠 유효성 검사 표준도 정의합니다. CDN 네트워크는 전국에 분산된 노드에 ESI를 지원하는 캐시 서버를 설치하여 웹사이트의 동적 콘텐츠에 대한 CDN 서비스도 제공할 수 있습니다.
이 방법은 예를 들어 쇼핑몰의 제품 페이지에서 사용할 수 있습니다.
3. 데이터 캐싱
이름에서 알 수 있듯이 특정 제품 정보에 대한 데이터를 캐싱하는 방법입니다. 쇼핑몰에 제품 ID를 사용해야 합니다. 요청 시 매장 정보, 제품 정보 등을 포함한 데이터를 가져오며, 이 데이터는 파일 이름에 제품 ID가 포함되어 있습니다. 고유 식별자를 생성합니다. 다음에 누군가가 이 제품을 보고자 할 때 먼저 데이터베이스를 쿼리하지 않고 이 파일의 정보를 직접 조정합니다. 실제로 캐시 파일에 캐시된 내용은
이 방법은 Ecmall 몰 시스템에서 사용됩니다.
4. 캐시 조회
其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示;
按时间变更进行缓存
其实,这一条不是真正的缓存方式;上面的2、3、4的缓存技术一般都用到了时间变更判断;就是对于缓存文件您需要设一个有效时间,在这个有效时间 内,相同的访问才会先取缓存文件的内容,但是超过设定的缓存时间,就需要重新从数据库中获取数据,并生产最新的缓存文件;比如,我将我们商城的首页就是设 置2个小时更新一次;
5、按内容变更进行缓存
这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件;
比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存;
当商家在后台修改这个商品的信息时,点击保存,我们同时就更新缓存文件;那么,买家访问这个商品信息时,实际上访问的是一个静态页面,而不需要再去访问数据库;
试想,如果对商品页不缓存,那么每次访问一个商品就要去数据库查一次,如果有10万人在线浏览商品,那服务器压力就大了;
6、内存式缓存
提到这个,可能大家想到的首先就是Memcached;memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
它就是将需要缓存的信息,缓存到系统内存中,需要获取信息时,直接到内存中取;比较常用的方式就是 key–>value方式;
<?php $memcachehost = '192.168.6.191'; $memcacheport = 11211; $memcachelife = 60; $memcache = new Memcache; $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect"); $memcache->set('key','缓存的内容'); $get = $memcache->get($key); //获取信息 ?>
7、apache缓存模块
apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块。
安装apache时:./configure –enable-cache –enable-disk-cache –enable-mem-cache
8、php APC缓存扩展
Php有一个APC缓存扩展,windows下面为php_apc.dll,需要先加载这个模块,然后是在php.ini里面进行配置:
[apc] extension=php_apc.dll apc.rfc1867 = on upload_max_filesize = 100M post_max_size = 100M apc.max_file_size = 200M upload_max_filesize = 1000M post_max_size = 1000M max_execution_time = 600 ; 每个PHP页面运行的最大时间值(秒),默认30秒 max_input_time = 600 ; 每个PHP页面接收数据所需的最大时间,默认60 memory_limit = 128M ; 每个PHP页面所吃掉的最大内存,默认8M
9、Opcode缓存
我们知道,php的执行流程可以用下图来展示:
首先php代码被解析为Tokens,然后再编译为Opcode码,最后执行Opcode码,返回结果;所以,对于相同的php文件,第一次运行时 可以缓存其Opcode码,下次再执行这个页面时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了。
比较知名的是XCache、Turck MM Cache、PHP Accelerator等。
위 내용은 PHP의 9가지 주요 캐싱 기술 요약에 대한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!