cache de fichiers statiques php

小云云
Libérer: 2023-03-17 11:10:01
original
6660 Les gens l'ont consulté

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);
        }
    }
}
Copier après la connexion

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";
}
Copier après la connexion

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);//如果没过期,输出缓存内容
}
}
Copier après la connexion

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);
}
Copier après la connexion

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);
Copier après la connexion

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);
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!