백엔드 개발 PHP 튜토리얼 PHP 캐싱 기술 및 PHP 캐싱 구현 코드에 대한 자세한 소개

PHP 캐싱 기술 및 PHP 캐싱 구현 코드에 대한 자세한 소개

Nov 29, 2016 am 10:18 AM
php

일부 일정하지만 여전히 변경될 수 있는 정보와 같은 일부 정보는 표시 속도를 높이기 위해 캐시에 저장됩니다. 이는 일반적으로 캐시에 저장된 일부 공유 정보로 이해됩니다. 서버 측. 캐시를 저장할 때 다음 업데이트 시간을 지정할 수 있습니다. 예를 들어

데이터 캐시입니다. 여기에 언급된 캐시는 데이터베이스 쿼리 PHP 캐싱 메커니즘을 나타내며, 페이지에 액세스할 때마다 해당 캐시 데이터가 존재하는지 먼저 감지하고, 해당 데이터가 존재하지 않으면 데이터베이스에 연결하여 데이터를 얻은 후 쿼리를 직렬화합니다. 결과를 저장하고 나중에는 동일한 쿼리 결과를 캐시 테이블이나 파일에서 직접 얻을 수 있습니다.

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

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

페이지 캐시:

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

시간 트리거 캐시:

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

콘텐츠 트리거 캐싱:

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

정적 캐시:

여기서 언급하는 정적 캐시는 HTML이나 XML 등의 텍스트 파일을 직접 생성하고 업데이트가 있을 때 다시 생성하는 정적 캐시를 말하며, 그렇지 않은 페이지에 적합합니다. 많이 바뀌 었어요. 더 이상 이야기하지 마세요.

위 내용은 코드 수준의 솔루션입니다. 다른 프레임워크를 직접 CP하고 변경하기에는 너무 게으른 내용이며, 하기 쉽고 여러 가지 방법으로 사용할 수 있습니다. 콘텐츠는 서버용입니다. 코드 수준이 아닌 엔드엔드 캐싱 솔루션은

메모리 캐싱을 달성하기 위해 여러 당사자의 협력이 필요합니다.

Memcached는 고성능 분산 메모리 객체입니다. PHP 동적 애플리케이션에서 데이터베이스 로드를 줄이고 액세스 속도를 향상시키기 위한 캐싱 메커니즘 시스템입니다.

PHP 버퍼:

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

MYSQL 캐시:

이것도 코드 수준이 아닌 것으로 간주됩니다. 클래식 데이터베이스에서는 이 방법을 사용합니다. 아래 실행 시간을 보면 0.09xxx 등이 있습니다.
하겠습니다. 게시글 파란색 옷을 입은 남자가 수정한 my.ini 부분에 따르면 2G MYISAM 테이블은 거의 1년 동안 수정했다고 합니다.

역방향 기반의 웹 캐시입니다. 프록시:

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

Google을 사용하여 PHP 캐싱 기술 방법을 알아보세요

PHP 캐싱 구현을 보내주세요. apc 및 파일 캐싱을 구현하고 Cache_Abstract를 상속하여 타사 캐싱 도구를 호출합니다.

shindig의 캐시 클래스와 apc를 참고하세요.

<?php   
class CacheException extends Exception {}   
/**  
 * <a href="http://www.php.cn/category/79.html">缓存</a>抽象类  
 */  
abstract class Cache_Abstract {   
    /**  
     * 读<a href="http://www.php1.cn/category/79.html">缓存</a>变量  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>下标  
     * @return mixed  
     */  
    abstract public function fetch($key);   
        
    /**  
     * <a href="http://www.php.cn/category/79.html">缓存</a>变量  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>变量下标  
     * @param string $value <a href="http://www.php.cn/category/79.html">缓存</a>变量的值  
     * @return bool  
     */  
    abstract public function store($key, $value);   
        
    /**  
     * 删除<a href="http://www.php.cn/category/79.html">缓存</a>变量  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>下标  
     * @return Cache_Abstract  
     */  
    abstract public function delete($key);   
        
    /**  
     * 清(删)除所有<a href="http://www.php.cn/category/79.html">缓存</a>  
     *  
     * @return Cache_Abstract  
     */  
    abstract public function clear();   
        
    /**  
     * 锁定<a href="http://www.php.cn/category/79.html">缓存</a>变量  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>下标  
     * @return Cache_Abstract  
     */  
    abstract public function lock($key);   
    
    /**  
     * <a href="http://www.php.cn/category/79.html">缓存</a>变量解锁  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>下标  
     * @return Cache_Abstract  
     */  
    abstract public function unlock($key);   
    
    /**  
     * 取得<a href="http://www.php.cn/category/79.html">缓存</a>变量是否被锁定  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>下标  
     * @return bool  
     */  
    abstract public function isLocked($key);   
    
    /**  
     * 确保不是锁定状态  
     * 最多做$tries次睡眠等待解锁,超时则跳过并解锁  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>下标  
     */  
    public function checkLock($key) {   
        if (!$this->isLocked($key)) {   
            return $this;   
        }   
            
        $tries = 10;   
        $count = 0;   
        do {   
            usleep(200);   
            $count ++;   
        } while ($count <= $tries && $this->isLocked($key));  // 最多做十次睡眠等待解锁,超时则跳过并解锁   
    
        $this->isLocked($key) && $this->unlock($key);   
            
        return $this;   
    }   
}   
    
    
/**  
 * APC扩展<a href="http://www.php.cn/category/79.html">缓存</a>实现  
 *   
 *   
 * @category   Mjie  
 * @package    Cache  
 * @author     流水孟春  
 * @copyright  Copyright (c) 2008- <cmpan(at)qq.com>  
 * @license    New BSD License  
 * @version    $Id: Cache/Apc.php 版本号 2010-04-18 23:02 cmpan $  
 */  
class Cache_Apc extends Cache_Abstract {   
        
    protected $_prefix = &#39;cache.mjie.net&#39;;   
        
    public function __construct() {   
        if (!function_exists(&#39;apc_cache_info&#39;)) {   
            throw new CacheException(&#39;apc extension didn&#39;t installed&#39;);   
        }   
    }   
        
    /**  
     * 保存<a href="http://www.php.cn/category/79.html">缓存</a>变量  
     *  
     * @param string $key  
     * @param mixed $value  
     * @return bool  
     */  
    public function store($key, $value) {   
        return apc_store($this->_storageKey($key), $value);   
    }   
        
    /**  
     * 读取<a href="http://www.php.cn/category/79.html">缓存</a>  
     *  
     * @param string $key  
     * @return mixed  
     */  
    public function fetch($key) {   
        return apc_fetch($this->_storageKey($key));   
    }   
        
    /**  
     * 清除<a href="http://www.php.cn/category/79.html">缓存</a>  
     *  
     * @return Cache_Apc  
     */  
    public function clear() {   
        apc_clear_cache();   
        return $this;   
    }   
        
    /**  
     * 删除<a href="http://www.php.cn/category/79.html">缓存</a>单元  
     *  
     * @return Cache_Apc  
     */  
    public function delete($key) {   
        apc_delete($this->_storageKey($key));   
        return $this;   
    }   
        
    /**  
     * <a href="http://www.php.cn/category/79.html">缓存</a>单元是否被锁定  
     *  
     * @param string $key  
     * @return bool  
     */  
    public function isLocked($key) {   
        if ((apc_fetch($this->_storageKey($key) . &#39;.lock&#39;)) === false) {   
            return false;   
        }   
            
        return true;   
    }   
        
    /**  
     * 锁定<a href="http://www.php.cn/category/79.html">缓存</a>单元  
     *  
     * @param string $key  
     * @return Cache_Apc  
     */  
    public function lock($key) {   
        apc_store($this->_storageKey($key) . &#39;.lock&#39;, &#39;&#39;, 5);   
        return $this;   
    }   
        
    /**  
     * <a href="http://www.php.cn/category/79.html">缓存</a>单元解锁  
     *  
     * @param string $key  
     * @return Cache_Apc  
     */  
    public function unlock($key) {   
        apc_delete($this->_storageKey($key) . &#39;.lock&#39;);   
        return $this;   
    }   
        
    /**  
     * 完整<a href="http://www.php.cn/category/79.html">缓存</a>名  
     *  
     * @param string $key  
     * @return string  
     */  
    private function _storageKey($key) {   
        return $this->_prefix . &#39;_&#39; . $key;   
    }   
}   
    
/**  
 * 文件<a href="http://www.php.cn/category/79.html">缓存</a>实现  
 *   
 *   
 * @category   Mjie  
 * @package    Cache  
 * @author     流水孟春  
 * @copyright  Copyright (c) 2008- <cmpan(at)qq.com>  
 * @license    New BSD License  
 * @version    $Id: Cache/File.php 版本号 2010-04-18 16:46 cmpan $  
 */  
class Cache_File extends Cache_Abstract {   
    public $useSubdir     = false;   
        
    protected $_cachesDir = &#39;cache&#39;;   
        
    public function __construct() {   
        if (defined(&#39;DATA_DIR&#39;)) {   
            $this->_setCacheDir(DATA_DIR . &#39;/cache&#39;);   
        }   
    }   
        
    /**  
     * 获取<a href="http://www.php.cn/category/79.html">缓存</a>文件  
     *  
     * @param string $key  
     * @return string  
     */  
    protected function _getCacheFile($key) {   
        $subdir = $this->useSubdir ? substr($key, 0, 2) . &#39;/&#39; : &#39;&#39;;   
        return $this->_cachesDir . &#39;/&#39; . $subdir . $key . &#39;.php&#39;;   
    }   
    
    /**  
     * 读取<a href="http://www.php.cn/category/79.html">缓存</a>变量  
     * 为防止信息泄露,<a href="http://www.php.cn/category/79.html">缓存</a>文件格式为php文件,并以"<?php exit;?>"开头  
     *   
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>下标  
     * @return mixed  
     */  
    public function fetch($key) {   
        $cacheFile = self::_getCacheFile($key);   
        if (file_exists($cacheFile) && is_readable($cacheFile)) {   
            // include 方式   
            //return include $cacheFile;   
            // 系列化方式   
    
            return unserialize(@file_get_contents($cacheFile, false, NULL, 13));   
        }   
    
        return false;   
    }   
    
    /**  
     * <a href="http://www.php.cn/category/79.html">缓存</a>变量  
     * 为防止信息泄露,<a href="http://www.php.cn/category/79.html">缓存</a>文件格式为php文件,并以"<?php exit;?>"开头  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>变量下标  
     * @param string $value <a href="http://www.php.cn/category/79.html">缓存</a>变量的值  
     * @return bool  
     */  
    public function store($key, $value) {   
        $cacheFile = self::_getCacheFile($key);   
        $cacheDir  = dirname($cacheFile);   
    
        if(!is_dir($cacheDir)) {   
            if(!@mkdir($cacheDir, 0755, true)) {   
                throw new CacheException("Could not make cache directory");   
            }   
        }   
    // 用include方式   
        //return @file_put_contents($cacheFile, &#39;<?php return &#39; . var_export($value, true). &#39;;&#39;);   
    
        return @file_put_contents($cacheFile, &#39;<?php exit;?>&#39; . serialize($value));   
    }   
    
    /**  
     * 删除<a href="http://www.php.cn/category/79.html">缓存</a>变量  
     *  
     * @param string $key <a href="http://www.php.cn/category/79.html">缓存</a>下标  
     * @return Cache_File  
     */  
    public function delete($key) {   
        if(emptyempty($key)) {   
            throw new CacheException("Missing argument 1 for Cache_File::delete()");   
        }   
            
        $cacheFile = self::_getCacheFile($key);   
        if(!@unlink($cacheFile)) {   
            throw new CacheException("Cache file could not be deleted");   
        }   
    
        return $this;   
    }   
    
    /**  
     * <a href="http://www.php.cn/category/79.html">缓存</a>单元是否已经锁定  
     *  
     * @param string $key  
     * @return bool  
     */  
    public function isLocked($key) {   
        $cacheFile = self::_getCacheFile($key);   
        clearstatcache();   
        return file_exists($cacheFile . &#39;.lock&#39;);   
    }   
    
    /**  
     * 锁定  
     *  
     * @param string $key  
     * @return Cache_File  
     */  
    public function lock($key) {   
        $cacheFile = self::_getCacheFile($key);   
        $cacheDir  = dirname($cacheFile);   
        if(!is_dir($cacheDir)) {   
            if(!@mkdir($cacheDir, 0755, true)) {   
                if(!is_dir($cacheDir)) {   
                    throw new CacheException("Could not make cache directory");   
                }   
            }   
        }   
    
        // 设定<a href="http://www.php.cn/category/79.html">缓存</a>锁文件的访问和修改时间   
        @touch($cacheFile . &#39;.lock&#39;);   
        return $this;   
    }   
      
    /**  
     * 解锁  
     *  
     * @param string $key  
     * @return Cache_File  
     */  
    public function unlock($key) {   
        $cacheFile = self::_getCacheFile($key);   
        @unlink($cacheFile . &#39;.lock&#39;);   
        return
로그인 후 복사


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

CakePHP 로깅 CakePHP 로깅 Sep 10, 2024 pm 05:26 PM

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

See all articles