ホームページ  >  記事  >  バックエンド開発  >  PHPの静的ファイルキャッシュ

PHPの静的ファイルキャッシュ

小云云
小云云オリジナル
2017-11-11 13:27:016668ブラウズ

PHP ファイルのキャッシュは、主にデータベース サーバーへの負荷を軽減するために使用されます。ここで言う PHP ファイルの静的キャッシュとは、HTML や XML などのテキスト ファイルを静的に直接生成し、更新があった場合に再生成することを指します。あまり変わらないページ。

1. 静的ファイルキャッシュ
2. Memcache、redis キャッシュ
静的キャッシュ: php を使用してデータを組み立て、データをファイルに書き込みます。
staticcache.php

<?php
class File{
    private $_dir;//定义一个默认的路径
    const EXT = &#39;.txt&#39;;//定义一个文件名后缀的常量
    public function __construct(){
        $this->_dir = dirname(__FILE__).&#39;/files/&#39;;//获取文件的当前目录,再放到该目录下的files文件夹中,然后赋给$_dir
    }
    //把生成/获取/删除缓存这三个操作封装在cacheData方法中
    public function cacheData($key,$value = &#39;&#39;,$path = &#39;&#39;){
        $filename = $this->_dir.$path.$key.self::EXT;//拼装成一个文件:默认目录、路径、文件名、文件名后缀
        //将value值写入缓存
        if($value !== &#39;&#39;){
        //删除缓存
            if (is_null($value)){
                return @unlink($filename);//unlink删除文件,@忽略警告
            }
            $dir = dirname($filename);
            if(!is_dir($dir)){//如果目录不存在就创建目录,首先要获取这个目录
            mkdir($dir,0777);
        }
        return file_put_contents($filename, json_encode($value));}
        //获取缓存
        if(!is_file($filename)){
        return FALSE;
        }else{
            return json_decode(file_get_contents($filename),true);
        }
    }
}

test.php

<?php
require_once(&#39;./staticcache.php&#39;);
$data = array(
&#39;id&#39; => 1,
&#39;name&#39; => &#39;panda&#39;,
&#39;number&#39; => array(1,7,8)
);
$file = new File();
//获取缓存
if($file->cacheData(&#39;index_cache&#39;)){
    var_dump($file->cacheData(&#39;index_cache&#39;));exit;
    echo "success";
}else{
    echo "error";
}

最適化後の静的キャッシュ時間を設定します:
cachetime.php

<?php
class File{
    private $_dir;//定义一个默认的路径
    const EXT = &#39;.txt&#39;;//定义一个文件名后缀的常量
    public function __construct(){
        $this->_dir = dirname(__FILE__).&#39;/files/&#39;;//获取文件的当前目录,再放到该目录下的files文件夹中,然后赋给$_dir
    }
    //把生成/获取/删除缓存这三个操作封装在cacheData方法中
    public function cacheData($key,$value = &#39;&#39;,$cacheTime = 0){//不传cacheTime永久有效
        $filename = $this->_dir.$key.self::EXT;//拼装成一个文件:默认目录、路径、文件名、文件名后缀
        //将value值写入缓存
        if($value !== &#39;&#39;){
//删除缓存
if (is_null($value)){
return @unlink($filename);//unlink删除文件,@忽略警告
}
$dir = dirname($filename);
if(!is_dir($dir)){//如果目录不存在就创建目录,首先要获取这个目录
mkdir($dir,0777);
}
$cacheTime = sprintf(&#39;%011d&#39;,$cacheTime)//规定缓存时间格式,不足11位,则前面补0,方便获取时截取
return file_put_contents($filename, $cacheTime.json_encode($value));//缓存时间与数据拼接
}
        //获取缓存
if(!is_file($filename)){
return FALSE;
}
$contents = file_get_contents($filename);
$cacheTime = (int)substr($contents,0,11);
$value = substr($contents,11);
if($cacheTime !=0 && ($cacheTime + fileatime($filename)<time())){//判断是否过期
unlink($filename);//缓存失效删除文件
return FALSE;
}
return json_decode($value,true);//如果没过期,输出缓存内容
}
}

キャッシュメソッドを使用してホームページインターフェイスを開発します

<?php
require_once(&#39;./jsonxml.php&#39;);
require_once(&#39;./db.php&#39;);
require_once(&#39;./cachetime.php&#39;);
$page = isset($_GET[&#39;page&#39;]) ? $_GET[&#39;page&#39;] : 1;
$pageSize = isset($_GET[&#39;pagesize&#39;]) ? $_GET[&#39;pagesize&#39;] : 6;
if(!is_numeric($page)||!is_numeric($pageSize)){
return Response::show(401,&#39;数据不合法&#39;);
}
$offset = ($page - 1) * $pageSize;
$sql = "select * from video where status = 1 order by orderby desc limit ".$offset.",".$pageSize;
//4-4 读取缓存方式开发首页接口
$cache = new File();$videos = array();
if(!$videos = $cache->cacheData(&#39;index_yjp_cache&#39;.$page.&#39;-&#39;.$pageSize)){
echo 1;exit;//如果缓存失效输出1
try{
$connect = Db::getInstance()->connect();
}catch(Exception $e){
return Response::show(403,&#39;数据库链接失败&#39;);
}
$result = mysql_query($sql,$connect);
$videos = array();
while ($video = mysql_fetch_assoc($result)){
$videos[] = $video;
}
if($videos){
$cache->cacheData(&#39;index_yjp_cache&#39;.$page.&#39;-&#39;.$pageSize,$videos,1200);
}
}
if($videos){
return Response::show(200,&#39;首页数据获取成功&#39;,$videos);
}else{
return Response::show(400,&#39;失败&#39;,$videos);
}

注: 有効期限に注意してくださいファイルキャッシュ用のファイルの時刻を取得します
1 。ファイル作成時刻を取得する例:

$ctime=filectime("chinawinxp.txt");
echo "创建时间:".date("Y-m-d H:i:s",$ctime);

2。ファイル変更時刻を取得する例:

$mtime=filemtime("chinawinxp.txt");
echo "修改时间:".date("Y-m-d H:i:s",$mtime);

fileatime()関数は、指定されたファイルの最終アクセス時刻を返します

2。 memcache と redis キャッシュ
サービスを有効にする; 接続ポート、キャッシュ サーバー; PHP 操作 PHP 操作 redis、mencache 条件:
1) phpredis 拡張機能/mencache 拡張機能をインストールする
2) PHP 接続 redis サービス connet(127.0.0.1,6379);
接続するmencache service connet('memcache_host',11211);
3) set キャッシュを設定します
4) get キャッシュを取得します
キャッシュ時間を設定します: キーの時間 (時間) 値を設定します

PHP キャッシュには、PHP コンパイル キャッシュと PHP データ キャッシュが含まれます。 PHP は、コンパイルと実行を同時に行うインタープリター型言語です。この動作モードの利点は、プログラムの変更が非常に便利であることですが、動作効率が非常に低いことです。この状況に対処するために PHP コンパイル キャッシュが改善され、PHP 言語はプログラムが 1 回実行される限り、プログラムのコンパイル結果をキャッシュできるようになりました。こうすることで、後続の実行を再度コンパイルする必要がなくなり、PHP の実行速度が大幅に向上します。

関連する推奨事項:

Web サイトのアクセス速度を向上させるための php 静的キャッシュの実装コード

ThinkPHP 静的キャッシュの更新の問題

thinkphp 静的キャッシュの使用分析、thinkphp 静的キャッシュ_PHP チュートリアル

以上がPHPの静的ファイルキャッシュの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。