ホームページ > バックエンド開発 > PHPチュートリアル > [codeigniter 5]、クエリキャッシュ

[codeigniter 5]、クエリキャッシュ

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-30 13:31:39
オリジナル
968 人が閲覧しました

データベース キャッシュ クラス

データベース キャッシュ クラスを使用すると、データベース クエリの結果をテキスト ファイルに保存して、データベース アクセスを減らすことができます。

重要

キャッシュが有効になっている場合、このクラスはデータベース ドライバーによって自動的にロードされます。手動でロードしないでください。

重要

すべてのクエリ結果をキャッシュできるわけではありません。このページの内容をよくお読みください。

キャッシュを有効にする

キャッシュを有効にするには、次の 3 つの手順が必要です:

  • キャッシュ ファイルを保存するための書き込み可能なディレクトリをサーバー上に作成します
  • ファイル application/config/database.php の queuedir パラメーターを使用してそのディレクトリ パスを設定します。
  • application/config/database.php ファイルのcache_onパラメータをTRUEに設定することで、次の方法を使用して手動で設定することもできます。

キャッシュを有効にすると、ページにデータベース クエリが含まれている限り、ページが読み込まれるたびに自動的にキャッシュされます。

キャッシュはどのように機能しますか?

CodeIgniter のクエリ キャッシュ システムは、ページにアクセスすると自動的に実行されます。キャッシュが有効な場合、ページが最初に読み込まれるときに、クエリ結果オブジェクトがシリアル化され、サーバー上のテキスト ファイルに保存されます。次回そのページにアクセスするときは、データベースにアクセスせずに直接キャッシュ ファイルが使用され、キャッシュされたページに対するデータベース アクセスは 0 になります。

このタイプのクエリのみが結果を生成するため、キャッシュできるのは読み取りタイプ (SELECT) クエリのみです。書き込みタイプのクエリ (INSERT、UPDATE など) は結果を生成しないため、キャッシュされません。

キャッシュ ファイルの有効期限はなく、削除しない限り、キャッシュされている限りすべてのクエリを常に使用できます。特定のページのキャッシュを削除することも、キャッシュ全体をクリアすることもできます。一般に、次の関数を使用すると、特定のイベント (データベースへのデータの追加など) が発生したときにキャッシュをクリアできます。

キャッシュによりサイトのパフォーマンスが向上しますか?

キャッシュによってパフォーマンスの向上が達成できるかどうかは、多くの要因によって決まります。高度に最適化されたデータベースが低負荷状態にある場合、パフォーマンスの向上が見られない可能性があります。また、データベースへのアクセスが集中している場合、ファイル システムのオーバーヘッドが大きくなければ、キャッシュ後のパフォーマンスが向上する可能性があります。覚えておくべきことの 1 つは、キャッシュは、データベースへのアクセスからファイル システムへのアクセスまで、データの取得方法を単に変更するだけであるということです。

たとえば、一部のクラスターサーバー環境では、ファイルシステムの操作が頻繁すぎるため、キャッシュは実際には有害です。キャッシュは共有の単一サーバー環境でのみ有益である可能性があります。残念ながら、データベースをキャッシュする必要があるかどうかという質問に対する単一の答えはありません。すべては状況によって異なります。

キャッシュ ファイルはどのように保存されますか?

CodeIgniter は、各クエリを独自のキャッシュ ファイルにキャッシュします。キャッシュ ファイルは、呼び出されるコントローラー メソッドに基づいてそれぞれのサブディレクトリにさらに編成されます。より正確に言うと、サブディレクトリの名前は、URI の最初の 2 つのセグメント (コントローラー名とメソッド名) を使用して付けられます。

たとえば、ブログ コントローラーと、3 つの異なるクエリを含むコメント メソッドがあるとします。キャッシュ システムは、blog+comments という名前のディレクトリを作成し、このディレクトリ内に 3 つのキャッシュ ファイルを生成します。

URI に動的クエリが含まれている場合 (ページングを使用する場合など)、各クエリ インスタンスは独自の個別のキャッシュ ファイルを生成するため、最終的にはキャッシュ ファイルの数がページ上のクエリの数の数倍になる可能性があります。

キャッシュ ファイルを管理する

キャッシュ ファイルには有効期限がないため、アプリケーション内でキャッシュを削除するメカニズムが必要です。たとえば、ブログがあり、新しいコメントが追加されるたびにユーザーがコメントできるようにしていると仮定します。その際、コメントを表示するコントローラメソッドに対応するキャッシュファイルを削除する必要があります。キャッシュされたデータを削除するには 2 つの異なる方法があります。

すべてのデータベース メソッドがキャッシュと互換性があるわけではありません

最後に、キャッシュされた結果オブジェクトは結果オブジェクトの単なる簡略化されたバージョンであることを指摘しなければなりません。このため、結果をクエリするいくつかのメソッドは使用できません。

以下にリストされているメソッドは、キャッシュされた結果オブジェクトでは使用できません:

  • num_fields()
  • field_names()
  • field_data()
  • free_result()

同時に、result_id と conn_id id の両方を使用することはできません。これら 2 つの ID はリアルタイム データベース操作にのみ適しているため、どちらかを使用します。

関数リファレンス

$this->db->cache_on() / $this->db->cache_off()

は、キャッシュを必要としないときに手動でキャッシュを有効/無効にするために使用されます。何かをキャッシュする これら 2 つの方法は、クエリを実行するときに役立ちます。例:

// Turn caching on
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM mytable");

// Turn caching off for this one query
$this->db->cache_off();
$query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");

// Turn caching back on
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM another_table");
ログイン後にコピー

$this->db->cache_delete()

特定のページのキャッシュ ファイルを削除します。これは、データベースの更新後にキャッシュをクリアする必要がある場合に便利です。

キャッシュ システムは、アクセスしたページの URI に従って、キャッシュを対応するキャッシュ ファイルに書き込みます。たとえば、example.com/index.php/blog/comments ページにアクセスしている場合、キャッシュ システムは、これらのキャッシュ ファイルを削除するには、

$this->db->cache_delete('blog', 'comments');
ログイン後にコピー

を使用します。

如果你没提供任何参数,将会清除当前 URI 对应的缓存文件。

$this->db->cache_delete_all()

清除所有的缓存文件,例如:

$this->db->cache_delete_all();
ログイン後にコピー

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了[codeigniter 五]、查询缓存,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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