ThinkPHP の静的キャッシュと動的キャッシュの実装に関する分析

不言
リリース: 2023-03-30 19:24:02
オリジナル
1573 人が閲覧しました

この記事では主に静的キャッシュと動的キャッシュを実装するための ThinkPHP のサンプル コードを紹介します。興味のある方は参考にしてください。

静的キャッシュ

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

静的ルールの定義

'HTML_CACHE_ON'   =>  true, // 开启静态缓存
'HTML_CACHE_TIME'  =>  60,  // 全局静态缓存有效期(秒)
'HTML_FILE_SUFFIX' =>  '.shtml', // 设置静态缓存文件后缀
'HTML_CACHE_RULES' =>   array( // 定义静态缓存规则
   // 定义格式1 数组方式
   '静态地址'  =>   array('静态规则', '有效期', '附加规则'), 
   // 定义格式2 字符串方式
   '静态地址'  =>   '静态规则', 
)
ログイン後にコピー

静的キャッシュ ファイルのルート ディレクトリは HTML_PATH で定義されたパスの下にあり、静的ルールを定義する操作のみが静的にキャッシュされます。また、静的キャッシュはさまざまなストレージ タイプをサポートします。静的キャッシュは GET リクエストでのみ機能します。

静的アドレス

グローバル操作の静的ルール

'read'=>array('{id}',60)//定义所有的read操作的静态规则
ログイン後にコピー

グローバル コントローラーの静的ルールの定義

'user:'=>array('User/{:action}_{id}','600')//定义所有的User控制器的静态规则
ログイン後にコピー

定義静的ルール特定のコントローラーの操作用 //静的キャッシュ用のブログ コントローラーの読み取り操作を定義します

'blog:read'=>array('{id}',0)//参数为0表示永久缓存
ログイン後にコピー

グローバル静的キャッシュ ルールを定義します

'*'=>array('{$_SERVER.REQUEST_URI|md5}')//这个属于特殊情况下的使用,任何模块的操作都适用
ログイン後にコピー

静的ルール

#静的ルールは、生成される静的ファイルの名前を定義するために使用されます。静的ルールの定義では、競合が発生しないようにする必要があります。


システム変数を使用する

{$_×××|function}//_GET、_REQUEST、_SERVER、_SESSION、_COOKIE
{$_GET.name} 
{$_SERVER.REQUEST_URI|md5}
ログイン後にコピー

フレームワーク定義の変数を使用する

{:module}/{:controller}_{:action}//{:module} 、{:controller} 和{:action}分别表示当前模块名、控制器名和操作名。
ログイン後にコピー

_GET 変数を使用する

{var|function}//{id}其实等效于 {$_GET.id}
ログイン後にコピー

関数を直接使用する

{|function}//{|time},time函数获取时间后作为文件名称
ログイン後にコピー

混合定義

'{id},{name|md5}' //在{}之外的字符作为字符串对待,如果包含有"/",会自动创建目录。
{:module}/{:action}_{id}//会在静态目录下面创建模块名称的子目录,然后写入操作名_id.shtml 文件。
ログイン後にコピー

動的キャッシュ

[Sメソッドデータキャッシュ]

キャッシュ初期化

S(array('type'=>'xcache','expire'=>60));
ログイン後にコピー

システムは現在サポートされていますキャッシュ タイプには、Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache、および Xcache が含まれます。 S メソッドが初期化のために type パラメータを渡さない場合、構成ファイルに設定されている DATA_CACHE_TYPE パラメータ値がデフォルトのタイプとして読み取られます。同様に、prefix パラメータが渡されない場合は、設定ファイルの DATA_CACHE_PREFIX パラメータ値が読み取られます。expired パラメータが渡されない場合は、DATA_CACHE_TIME 設定値がデフォルトとして読み込まれます。


グローバル キャッシュの場合は、通常、混乱を避けるために、異なるアプリケーションを区別するためにプレフィックス (キャッシュ プレフィックス) パラメーターを追加することをお勧めします。

キャッシュを設定する


データ キャッシュはキャッシュ キューをサポートできます。簡単に言うと、初期化中に長さのパラメーターを指定するだけです。

S('name',$value);
S('name',$value,300);//缓存数据300秒
S('name',$value,array('type'=>'file','expire'=>300));//改变之前的缓存方式或者更多的参数
S(array('type'=>'xcache','length'=>100,'expire'=>60));//系统只会缓存最近的100条缓存数据。
ログイン後にコピー

キャッシュの読み取り

$value = S('name');//如果缓存标识不存在或者已经过期,则返回false,否则返回缓存值。
ログイン後にコピー

キャッシュの削除

S('name',null);
ログイン後にコピー

注: 各キャッシュを使用する場合、ThinkPHP は対応するドライバー ファイルをロードし、対応する構成を設定する必要があります。

使用例

$user = M('User');
$value = S('list');
if (empty($value)) {
  $list = $user->select();
  S('list', $list, 3600);
  echo '这个是直接从数据库中读取的文件';
  dump($list);
} else {
  echo '这个是缓存文件';
  dump($value);
}
ログイン後にコピー

[クイック キャッシュ]

システムは、処理を高速化するための高速キャッシュ メソッド F も提供します。ただし、F メソッドには、有効期間はありません。F メソッドはさまざまなストレージ タイプをサポートします。ファイル タイプの場合は、デフォルトで DATA_PATH ディレクトリに保存されます。


高速キャッシュ データ

F('data',$Data);
F('data',$Data,TEMP_PATH);//快速缓存Data数据,保存到指定的目录
F('User/data',$Data);//F方法支持自动创建缓存子目录,在DATA_PATH目录下面缓存data数据,如果User子目录不存在,则自动创建。
ログイン後にコピー

キャッシュ データの取得

$Data = F('data');
ログイン後にコピー

キャッシュ データの削除

F('data',NULL);
ログイン後にコピー

[クエリ キャッシュ]

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


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

$Model->cache(true)->where('status=1')->select();
ログイン後にコピー

cache(true) を使用すると、現在のクエリ条件やクエリ中のその他の情報に基づいて、一意の識別子を持つクエリ キャッシュが生成されます。キーが指定されている場合は、キーの名前が生成されます。クエリキャッシュが直接生成されます。

$Model->cache('cache_name')->select();
ログイン後にコピー

デフォルトでは、キャッシュ方法は DATA_CACHE_TYPE パラメータで設定されたキャッシュ方法を使用します (システムのデフォルト値は File で、これはファイル キャッシュが使用されることを意味します)。キャッシュの有効期間は DATA_CACHE_TIME パラメータで設定された時間です。クエリキャッシュのキャッシュ方法と有効期間を個別に指定することもできます。

$Model->cache(true,60,'xcache')->select();
ログイン後にコピー

クエリ キャッシュのキーを指定すると、クエリ キャッシュの内容を S メソッドを通じて外部から直接取得できます。

$value = S('cache_name');
ログイン後にコピー

クエリ キャッシュは、select メソッドに加えて、find メソッドと getField メソッド、およびそれらの派生メソッド (統計クエリおよび動的クエリ メソッドを含む) もサポートします。

$Model->where($map)->cache('key',60)->find();
ログイン後にコピー
この記事は主に公式ドキュメントから引用しています。質問がある場合は、ThinkPHP3.2 公式ドキュメントを参照してください-caching


上記がこの内容のすべてです。関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

ThinkPHP はワンクリックでキャッシュをクリアする方法を実装します

PHP でキャッシュをクリアするいくつかの方法のまとめ

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート