Maison  >  Article  >  développement back-end  >  cache de fichiers statiques php

cache de fichiers statiques php

小云云
小云云original
2017-11-11 13:27:016683parcourir

La mise en cache des fichiers PHP est principalement utilisée pour réduire la pression sur le serveur de base de données. La mise en cache statique des fichiers PHP mentionnée ici fait référence à des fichiers texte statiques, générant directement des fichiers texte tels que HTML ou XML, et les régénérant en cas de mises à jour, ce qui est le cas. adapté aux applications qui ne changent pas beaucoup de page.

1. Cache de fichiers statique
2. Memcache, cache redis
Cache statique : utilisez php pour assembler les données, puis écrivez les données dans le fichier.
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";
}

Après avoir défini l'optimisation du temps de cache statique :
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);//如果没过期,输出缓存内容
}
}

Méthode de cache pour développer l'interface de la page d'accueil

<?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);
}

Remarque : le cache de fichiers doit faire attention au délai d'expiration du fichier
1 Obtenez la création du fichier. exemple d'heure :

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

2. Exemple d'obtention de l'heure de modification d'un fichier :

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

la fonction fileatime() renvoie l'heure du dernier accès au fichier spécifié

2.memcache et redis Cache
Activer le service ; port de connexion, serveur de cache ; opération php opération php redis, conditions mencache :
1) Installer l'extension phpredis/mencache
2) php connect redis service connet(127.0.0.1,6379) ;
Se connecter au service mencache connet('memcache_host',11211);
3) définir le cache
4) obtenir obtenir le cache
Définir l'heure du cache : définir la valeur du temps clé (heure)

Le cache PHP comprend le cache de compilation PHP et le cache de données PHP. PHP est un langage interprété qui se compile et s'exécute en même temps. L'avantage de ce mode de fonctionnement est que la modification du programme est très pratique, mais l'efficacité de fonctionnement est très faible. Le cache de compilation PHP a été amélioré pour faire face à cette situation, afin que le langage PHP puisse mettre en cache les résultats de compilation du programme tant qu'il est exécuté une seule fois. De cette façon, chaque exécution ultérieure n'a pas besoin d'être recompilée, ce qui améliore considérablement la vitesse d'exécution de PHP.

Recommandations associées :

Code d'implémentation du cache statique PHP pour améliorer la vitesse d'accès au site Web

Problème de mise à jour du cache statique ThinkPHP

Analyse de l'utilisation du cache statique thinkphp, tutoriel thinkphp static cache_PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn