Maison  >  Article  >  cadre php  >  Quels types de cache thinkphp propose-t-il ?

Quels types de cache thinkphp propose-t-il ?

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-08-22 13:43:472433parcourir

Quels types de cache thinkphp propose-t-il ?

ThinkPHP fournit des méthodes de mise en cache pratiques, notamment la mise en cache des données, la mise en cache statique et la mise en cache des requêtes, etc. La prise en charge inclut le mode fichier, APC, Db, Memcache, Shmop, Dynamic les types de cache de données, notamment Sqlite, Redis, Eaccelerator et Xcache, ainsi que les règles de cache statique personnalisables, fournissent des méthodes de raccourci pour les opérations d'accès.

Cache de données

Configuration du fichier de cache Thinkphp

Home est le projet frontal que j'ai créé. Recherchez le fichier de configuration mis en cache dans HomeConfconfig.php et. configurez-le comme suit :

<?php   
   return array(       
   &#39;DB_TYPE&#39;=>&#39;mysql&#39;,       
   &#39;DB_HOST&#39;=>&#39;127.0.0.1&#39;,       
  &#39;DB_NAME&#39;=>&#39;w3note&#39;,       
   &#39;DB_USER&#39;=>&#39;root&#39;,       
  &#39;DB_PWD&#39;=>&#39;123456&#39;,       
  &#39;DB_PORT&#39;=>&#39;3306&#39;,       
  &#39;DB_PREFIX&#39;=>&#39;w3_&#39;,       
  &#39;DATA_CACHE_TYPE&#39;=>&#39;file&#39;,//设置缓存方式为file       
  &#39;DATA_CACHE_TIME&#39;=>&#39;600&#39;,//缓存周期600秒       
 );       
 ?>

Utilisation de la fonction de cache Thinkphp

Dans thinkphp, utilisez la fonction de cache de raccourci S() pour la mise en cache :

S(&#39;data&#39;,$Data);//使用data标识缓存$Data数据  
S(&#39;data&#39;,$Data,600);// 缓存$Data数据600秒  
 $Data = S(&#39;data&#39;);// 获取缓存数据  
S(&#39;data&#39;,NULL);// 删除缓存数据
Exemple de démonstration

<?php       
 // 本类由系统自动生成,仅供测试用途       
  class IndexAction extends Action{       
    public function index(){       
        //如果有缓存,则读取缓存数据       
        //如果没有缓存,则读取数据库当中的数据放入缓存       
        $lists=S(&#39;lists&#39;);                     
        if(emptyempty($lists)){                           
          $news=M(&#39;news&#39;);   
          $lists=$news->select();   
          S(&#39;lists&#39;,$lists,600);   
          echo &#39;这是直接读取数据库的数据&#39;;       
           }   
        dump($list);  
 ?>

Visite http://127.0.0.1/Home/index.php/Index/index,

Première visite :

Il s'agit de lire directement le données de la base de données

array(10) {  
   [0] => array(12) {  
     ["id"] => string(1) "1"  
     ["catid"] => string(2) "13"  
     ["title"] => string(4) "thinkphp的缓存技术"  
     ["content"] => string(8) "thinkphp的缓存技术"  
     ["tags"] => string(4) "缓存"  
     ["thumb"] => string(0) ""  
     ["description"] => string(7) "thinkphp的缓存技术"  
     ["inputtime"] => string(10) "1348370202"  
     ["posid"] => string(1) "1"  
     ["ord"] => string(1) "2"  
     ["hits"] => string(1) "1"  
     ["status"] => string(1) "1"  
 }

Deuxième visite :

array(10) {  
   [0] => array(12) {  
     ["id"] => string(1) "1"  
     ["catid"] => string(2) "13"  
     ["title"] => string(4) "thinkphp的缓存技术"  
     ["content"] => string(8) "thinkphp的缓存技术"  
     ["tags"] => string(4) "缓存"  
     ["thumb"] => string(0) ""  
     ["description"] => string(7) "thinkphp的缓存技术"  
     ["inputtime"] => string(10) "1348370202"  
     ["posid"] => string(1) "1"  
     ["ord"] => string(1) "2"  
     ["hits"] => string(1) "1"  
     ["status"] => string(1) "1"  
 }

Remarque : lors de la première exécution, les informations affichées ci-dessus seront imprimées. Après avoir actualisé la page, il n'y a pas de "Ceci est le". données directement lues depuis la base de données " , indiquant que les données du cache précédemment générées sont lues.

Recommandations associées : "

Tutoriel ThinkPHP"

Cache rapide

Si vous souhaitez simplement mettre en cache certains fichiers pour simple. données et aucune notion de période de validité, le système fournit également une méthode de mise en cache rapide F pour des opérations plus rapides.

Mettez rapidement en cache les données de données et enregistrez-les par défaut dans le répertoire DATA_PATH

F(&#39;data&#39;,$Data);

Mettez rapidement en cache les données de données et enregistrez-les dans le répertoire spécifié

F(&#39;data&#39;,$Data,TEMP_PATH);

Obtenez les données mises en cache

$Data = F(&#39;data&#39;);

Supprimer les données en cache

F(&#39;data&#39;,NULL);

La méthode F prend en charge la création automatique de sous-répertoires de cache et met en cache les données sous le répertoire DATA_PATH Si le sous-répertoire User n'existe pas, il sera automatiquement créé :

F(&#39;User/data&#39;,$Data);
<.>La méthode Start F de la version 3.1.2 prend en charge la fonction de suppression par lots à l'aide de caractères génériques. Utilisez ce qui suit :

F(&#39;User/*&#39;,NULL);

signifie supprimer le cache de données sous le répertoire DATA_PATH.'User/'.

Le cache d'informations sur les champs de données intégré au système utilise un mécanisme de mise en cache rapide.

Cache de requêtes

Pour les requêtes de données qui ne nécessitent pas une grande rapidité, nous pouvons utiliser la fonction de cache de requêtes pour améliorer les performances, et il n'est pas nécessaire d'utiliser des méthodes de mise en cache pour la mise en cache et la récupération nous-mêmes.

Configuration APP/config.php :

&#39;DATA_CACHE_TIME&#39;   => 60, // 数据缓存有效期 0表示永久缓存
&#39;DATA_CACHE_TYPE&#39;   => &#39;File&#39;,
 // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
&#39;DB_SQL_BUILD_CACHE&#39; => true,
&#39;DB_SQL_BUILD_LENGTH&#39; => 20, // SQL缓存的队列长度
&#39;DATA_CACHE_PATH&#39; => TEMP_PATH,

La fonction de cache de requêtes prend en charge toutes les bases de données et prend en charge toutes les méthodes de mise en cache et toutes les périodes de validité.

Lors de l'utilisation du cache de requêtes, il vous suffit d'appeler la méthode cache de la classe Model, par exemple :

$Model->cache(true)->select();

Si cache(true) est utilisé, la requête SQL en cours sera traitée lors de l'interrogation. Générez le cache de requêtes. Par défaut, la méthode de cache utilise la méthode de cache définie par le paramètre DATA_CACHE_TYPE (la valeur par défaut du système est File, ce qui signifie que la période de validité du cache est la durée définie par le paramètre DATA_CACHE_TIME). . La méthode de cache et la période de validité du cache de requêtes peuvent également être spécifiées séparément :

$Model->cache(true,60,&#39;xcache&#39;)->select();

indique que le mode de cache actuel du cache de requêtes est xcache et que la période de validité du cache est de 60 secondes.

Pour une même requête, si la méthode cache n'est pas utilisée, aucun cache ne sera obtenu ou généré, même si la méthode Cache a été appelée auparavant.

Le cache de requêtes est uniquement destiné aux appels internes. Si vous souhaitez que le cache de requêtes soit ouvert à d'autres programmes, vous pouvez spécifier la clé du cache de requêtes. Par exemple :

$Model->cache(&#39;cache_name&#39;,60)->select();

Vous pouvez. obtenez directement le cache de requêtes en externe via la méthode S. Content,

$value = S(&#39;cache_name&#39;);

En plus de la méthode select, le cache de requêtes prend également en charge les méthodes find et getField, ainsi que leurs méthodes dérivées (y compris les requêtes statistiques et dynamiques). méthodes de requête). Pour des applications spécifiques, vous pouvez choisir la méthode de mise en cache et la période de validité du cache en fonction de vos besoins.

Cache d'analyse SQL

En plus de la mise en cache des requêtes, ThinkPHP prend également en charge la mise en cache d'analyse SQL. Grâce au mécanisme ORM de ThinkPHP, tout le SQL est généré dynamiquement, puis exécuté par. pilote de base de données.

Donc, si votre application a un grand nombre d'exigences de requêtes SQL, vous pouvez activer le cache d'analyse SQL pour réduire l'analyse SQL et améliorer les performances. Pour activer la mise en cache de l'analyse SQL, il vous suffit de définir :

&#39;DB_SQL_BUILD_CACHE&#39; => true,

pour activer le cache de création SQL pour les requêtes de base de données. La méthode de mise en cache par défaut est le mode fichier. Elle prend également en charge la mise en cache xcache et apc. :

&#39;DB_SQL_BUILD_QUEUE&#39; => &#39;xcache&#39;,

Nous savons que la quantité de requêtes SQL pour un projet peut être très énorme, il est donc nécessaire de définir la longueur de la file d'attente du cache. Par exemple, si nous espérons que le cache d'analyse SQL ne dépasse pas 20. enregistrements, nous pouvons définir :

&#39;DB_SQL_BUILD_LENGTH&#39; => 20, // SQL缓存的队列长度

Remarque : seule la méthode de requête prend en charge le cache d'analyse SQL

Cache statique

Pour utiliser la fonction de cache statique, vous devez activer le paramètre HTML_CACHE_ON et utiliser le paramètre de configuration HTML_CACHE_RULES pour définir le fichier de règles de cache du cache statique.

Bien que des règles de mise en cache statique puissent également être définies dans le fichier de configuration de l'application, il est recommandé de définir des règles de mise en cache statique pour différents modules dans le fichier de configuration du module.

Définition des règles statiques

La définition des règles statiques est la suivante :

&#39;HTML_CACHE_ON&#39; => true, // 开启静态缓存
&#39;HTML_CACHE_TIME&#39; => 60, // 全局静态缓存有效期(秒)
&#39;HTML_FILE_SUFFIX&#39; => &#39;.shtml&#39;, // 设置静态缓存文件后缀
&#39;HTML_CACHE_RULES&#39; => array( // 定义静态缓存规则
 // 定义格式1 数组方式
 &#39;静态地址&#39; => array(&#39;静态规则&#39;, &#39;有效期&#39;, &#39;附加规则&#39;), 
 // 定义格式2 字符串方式
 &#39;静态地址&#39; => &#39;静态规则&#39;, 
)

Le format de définition 1 utilise un tableau pour faciliter la définition de différents paramètres pour un règle statique. La période de validité, le format de définition 2 utilise le mode chaîne pour s'abonner aux règles statiques et utilise la période de validité du cache statique global définie par HTML_CACHE_TIME.

静态缓存文件的根目录在HTML_PATH定义的路径下面,并且只有定义了静态规则的操作才会进行静态缓存。 并且静态缓存支持不同的存储类型。 静态缓存仅在GET请求下面有效。

静态地址

静态地址包括下面几种定义格式:

第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为:

&#39;read&#39;=>array(&#39;{id}&#39;,60)

其中,{id}

表示取$_GET['id']

为静态缓存文件名,第二个参数表示缓存60秒。

第二种是定义全局的控制器静态规则,例如定义所有的User控制器的静态规则为:

&#39;user:&#39;=>array(&#39;User/{:action}_{id}&#39;,&#39;600&#39;)

其中,{:action}

表示当前的操作名称

第三种是定义某个控制器的操作的静态规则,例如,我们需要定义Blog控制器的read操作进行静态缓存

&#39;blog:read&#39;=>array(&#39;{id}&#39;,0)

第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如:

&#39;*&#39;=>array(&#39;{$_SERVER.REQUEST_URI|md5}&#39;),

表示根据当前的URL进行缓存。

静态规则

静态规则是用于定义要生成的静态文件的名称,静态规则的定义要确保不会冲突,写法可以包括以下情况:

1.使用系统变量

包括 _GET、_REQUEST、_SERVER、_SESSION、_COOKIE

格式:

{$_×××|function}

例如:

{$_GET.name} 
{$_SERVER.REQUEST_URI|md5}

2.使用框架特定的变量

{:module} 、{:controller} 和{:action}

分别表示当前模块名、控制器名和操作名。

例如:

{:module}/{:controller}_{:action}

3.使用_GET变量

{var|function}也就是说 {id}其实等效于 {$_GET.id}

4.直接使用函数

{|function} 例如:{|time}

5.支持混合定义

例如我们可以定义一个静态规则为:

&#39;{id},{name|md5}&#39;

在{}之外的字符作为字符串对待,如果包含有"/",会自动创建目录。

例如,定义下面的静态规则:

{:module}/{:action}_{id}

则会在静态目录下面创建模块名称的子目录,然后写入操作名_id.shtml 文件。

静态缓存有效期

单位为秒。如果不定义,则会获取配置参数HTML_CACHE_TIME的设置值,如果定义为0则表示永久缓存。

附加规则

通常用于对静态规则进行函数运算,例如:

&#39;read&#39;=>array(&#39;Think{id},{name}&#39;,&#39;60&#39;, &#39;md5&#39;)

翻译后的静态规则是

md5(&#39;Think&#39;.$_GET[&#39;id&#39;]. &#39;, &#39;.$_GET[&#39;name&#39;]);

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