ホームページ  >  記事  >  PHPフレームワーク  >  thinkphp にはどのようなキャッシュ タイプがありますか?

thinkphp にはどのようなキャッシュ タイプがありますか?

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-08-22 13:43:472427ブラウズ

thinkphp にはどのようなキャッシュ タイプがありますか?

ThinkPHP は、データ キャッシュ、静的キャッシュ、クエリ キャッシュなどの便利なキャッシュ方法を提供し、ファイル モード、APC、Db、Memcache、Shmop、動的データ キャッシュをサポートしています。 Sqlite、Redis、Eaccelerator、Xcache などのタイプと、カスタマイズ可能な静的キャッシュ ルールは、アクセス操作のショートカット メソッドを提供します。

データ キャッシュ

Thinkphp キャッシュ ファイルの構成

Home は私が作成したフロントエンド プロジェクトで、キャッシュは Home\Conf\ にあります。

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

Thinkphp キャッシュ関数の使い方

thinkphp では、ショートカット キャッシュ関数 S() を使ってキャッシュを行います。

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);// 删除缓存数据

デモの例

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

http://127.0.0.1/Home/index.php/Index/index にアクセスしてください、

最初の訪問:

これはデータベースを直接読み取るためのものです。 データ

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"  
 }

2回目の訪問:

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"  
 }

注: 初めて実行するときは、上記の情報が出力されます。ページを更新した後は、何も表示されません。 「これは直接読み取りです」「データベースからデータを取得します」。以前に生成されたキャッシュ データが読み取られることを示します。

関連する推奨事項: 「ThinkPHP チュートリアル

クイック キャッシュ

一部のファイルをキャッシュしたい場合。単純な場合データが保存され、有効期間の概念がないため、システムは、より高速な操作を実現するための高速キャッシュ方式 F も提供します。

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

データ データをすばやくキャッシュし、デフォルトで DATA_PATH ディレクトリに保存します。

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

データ データをすばやくキャッシュし、指定したディレクトリに保存します。

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

キャッシュされたデータを取得します

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

キャッシュされたデータの削除

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

F メソッドは、キャッシュ サブディレクトリの自動作成をサポートし、DATA_PATH ディレクトリの下にデータ データをキャッシュします。User サブディレクトリが存在しない場合は、自動的に作成されます:

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

3.1.2 バージョン Start F メソッドは、次のワイルドカード文字を使用したバッチ削除機能をサポートしています。

&#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,

は、DATA_PATH.'User/' ディレクトリの下のデータ キャッシュを削除することを意味します。

システムの組み込みデータ フィールド情報キャッシュは、高速キャッシュ メカニズムを使用します。

クエリ キャッシュ

高い適時性を必要としないデータ クエリの場合、クエリ キャッシュ機能を使用してパフォーマンスを向上させることができ、キャッシュ方法を使用する必要はありません。自分自身でキャッシュと取得を行うためです。

APP/config.php 設定:

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

クエリ キャッシュ機能はすべてのデータベースをサポートし、すべてのキャッシュ方法と有効期間をサポートします。

クエリ キャッシュを使用する場合は、Model クラスのキャッシュ メソッドを呼び出すだけです。例:

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

cache(true) が使用される場合、現在のクエリ SQL が処理されます。クエリ中。クエリ キャッシュを生成します。デフォルトでは、キャッシュ メソッドは DATA_CACHE_TYPE パラメータで設定されたキャッシュ メソッドを使用します (システムのデフォルト値は File で、ファイル キャッシュが使用されることを意味します)。キャッシュの有効期間は、DATA_CACHE_TIME パラメータで設定された時間です。クエリ キャッシュのキャッシュ メソッドと有効期間は個別に指定することもできます:

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

は、現在のクエリ キャッシュのキャッシュ メソッドが xcache で、キャッシュの有効期間が 60 秒であることを示します。

同じクエリで、cache メソッドが使用されていない場合は、Cache メソッドが以前に呼び出されていたとしても、キャッシュは取得または生成されません。

クエリ キャッシュは内部呼び出し専用です。クエリ キャッシュを他のプログラムに公開したい場合は、クエリ キャッシュのキーを指定できます。例:

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

S メソッドを通じて外部からクエリ キャッシュを直接取得します。コンテンツ、

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

select メソッドに加えて、クエリ キャッシュは、find メソッドと getField メソッド、およびそれらの派生メソッド (統計クエリと動的クエリを含む) もサポートしています。クエリメソッド)。特定のアプリケーションについては、ニーズに応じてキャッシュ方法とキャッシュの有効期間を選択できます。

SQL 解析キャッシュ

クエリ キャッシュに加えて、ThinkPHP は SQL 解析キャッシュもサポートしています。ThinkPHP の ORM メカニズムにより、すべての SQL は動的に生成され、実行されます。データベースドライバー。

したがって、アプリケーションに多数の SQL クエリ要件がある場合は、SQL 解析キャッシュを有効にして SQL 解析を減らし、パフォーマンスを向上させることができます。 SQL 解析キャッシュを有効にするには、次の設定を行うだけです:

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

を設定して、データベース クエリの SQL 作成キャッシュを有効にします。デフォルトのキャッシュ方法はファイル モードです。xcache および apc キャッシュもサポートされています。設定する必要があるのは、設定することだけです:

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

プロジェクトの SQL クエリの量が非常に膨大になる可能性があることがわかっているため、キャッシュ キューの長さを設定する必要があります。たとえば、SQL 解析キャッシュが 20 を超えないようにする場合、

&#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;, 
)

注: SQL 解析キャッシュをサポートするのはクエリ メソッドのみです

静的キャッシュ

静的キャッシュ関数を使用するには、 HTML_CACHE_ON パラメータを有効にし、HTML_CACHE_RULES 構成パラメータを使用して静的キャッシュ ルール ファイルを設定する必要があります。

静的キャッシュ ルールはアプリケーション構成ファイルで定義することもできますが、モジュール構成ファイルでさまざまなモジュールの静的キャッシュ ルールを定義することをお勧めします。

静的ルールの定義

静的ルールの定義は次のとおりです。

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

定義形式 1 では、さまざまな静的ルールの設定を容易にするために配列を使用します。有効期間、定義形式 2 は、文字列モードを使用して静的ルールをサブスクライブし、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;]);

以上がthinkphp にはどのようなキャッシュ タイプがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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