データベース キャッシュ クラスを使用すると、データベース クエリの結果をテキスト ファイルに保存して、データベース アクセスを減らすことができます。
キャッシュをアクティブ化するには 3 つの手順が必要です:
一度アクティブ化すると、データベース クエリを含むページが読み込まれるたびにキャッシュが自動的に行われます。
CodeIgniter のクエリ キャッシュ システムは、ページの表示時に動的に実行できます。キャッシュ機能が有効になっている場合、このページが最初に読み込まれるときに、データベース クエリの結果オブジェクトがシリアル化され、サーバー上のテキスト ファイルに保存されます。ページが再度読み込まれると、キャッシュされたファイルがデータベース クエリを置き換えます。このようにして、キャッシュされたページ間でのデータベース使用量が 0 に下がります。
このタイプのクエリのみが結果セットを生成するため、読み取りタイプ (SELECT) クエリのみがキャッシュされます。 書き込みタイプ (書き込みタイプ) (INSERT、UPDATE など) のクエリは結果セットを生成しないため、キャッシュ システムは結果セットをキャッシュしません。
キャッシュ ファイルの有効期限はなく、キャッシュされたクエリは削除しない限り常に存在します。キャッシュ システムを使用すると、ページごとにクリアしたり、すべてのキャッシュをクリアしたりできます。一般に、特定のイベント (データベースへのデータの追加など) が発生したときに、次の関数を使用してキャッシュをクリアできます。
キャッシュによってパフォーマンスの向上が達成できるかどうかは、多くの要因によって決まります。高度に最適化されたデータベースの負荷が軽い場合は、パフォーマンスの向上が見られない可能性があります。 データベースが頻繁に使用されている場合、ファイル システムのオーバーヘッドがあまり大きくなければ、キャッシュによるパフォーマンスの向上が見られる場合があります。一部のクラスタ サーバー環境では、ファイル システムの操作が頻繁に行われ、キャッシュが正しく生成されないために、この状況が発生することがあります。 共有環境内の単一サーバーでは、キャッシュが有益な場合があります。パフォーマンスが向上するかどうかは、データベースによっても異なる場合があります。それはあなたの特定の状況によって異なります。
CI は、各クエリの結果を独自のキャッシュ ファイルに配置します。コントローラーの機能に応じて、キャッシュ ファイルのセットはさらにサブディレクトリに編成されます。正確に言うと、サブディレクトリの名前は、URI の最初の 2 つのセグメント (コントローラー クラス名と関数名) によって決まります。たとえば、コントローラー ブログと 3 つのクエリを含むコメント関数があるとします。キャッシュ システムは、blog+comments というディレクトリを作成し、このディレクトリ内に 3 つのキャッシュ ファイルを作成します。 URI の情報に基づいて動的にクエリを実行すると (ページングの使用など)、クエリの各インスタンスは独自のキャッシュ ファイルを作成します。したがって、多くのクエリを実行すると、キャッシュされたファイルの数が実行したクエリの数よりも多くなる可能性があります。
キャッシュされたファイルには有効期限がないため、アプリケーションでキャッシュ操作を削除するコードを記述する必要があります。たとえば、ユーザーがコメントを投稿できるブログがあるとします。新しいコメントが送信されるたびに、コントローラー関数を使用してコントローラー メソッドでキャッシュ ファイルを削除する必要があります。データの消去に役立つ 2 つの削除関数を次に紹介します。
キャッシュスイッチは手動で設定できます。この機能は、特定のクエリをキャッシュしたくない場合に便利です。例:
リーリーキャッシュファイルと特定のWebページを削除します。データベースを更新した後にキャッシュをクリアする必要がある場合。
キャッシュ システムは、アクセスされた URL に対応するサブディレクトリをキャッシュ ストレージ ディレクトリに作成し、そのサブディレクトリにキャッシュ ファイルを保存します。キャッシュ メイン ディレクトリは、たとえば、 application/config/database.php に設定したキャッシュ ディレクトリです。 example.com/index.php/blog/comments というアドレスのページを閲覧している場合、キャッシュ システムは、生成されたすべてのキャッシュ ファイルを blog+comments という名前のフォルダーに配置します。先ほどの例では、次のコードを実行する必要があります:
リーリー$this->db->cache_delete('blog', 'comments')、実際にテストしてみたらうまくいきませんでした。理由はわかりませんが、小さなバグなのかもわかりません。ただし、次の $this->db->cache_delete_all() は OK であり、問題ありません。
パラメータを使用しない場合、現在の URI 設定によってキャッシュをいつクリア/更新するかが決まります。
すべてのキャッシュファイルをクリアします。例:
リーリーCodeigniter は、最速の速度を達成するためのキャッシュ技術をサポートしています。 CI はすでに非常に効率的ですが、Web ページ内の動的コンテンツ、ホストのメモリ CPU、データベースの読み取り速度などの要因が Web ページの読み込み速度に直接影響します。 Web キャッシュを利用すると、プログラムの出力結果がハードディスクに保存されるため、Web ページの読み込み速度は静的な Web ページに近い速度を達成できます。
CI支持每个页面单独缓存,而且可以设置缓存更新时间。当一个网页第一次被加载的时候,缓存文件将被保存到application/cache文件夹。 下次访问的时候,系统就会直接读取缓存文件,然后返回给用户的浏览器。如果缓存文件过期,它将被删除并重新生成。
启用缓存功能,只需要将下面的代码放入你的任何一个控制器(controller)的方法(function)内:
$this->output->cache(n);
其中 n 是你希望缓存更新的 分钟 数。可以使用 m/60 来精确到秒,例如 1/60 ,则是精确到 1秒。上面的代码可以放到任何一个 function 里面。他的出现顺序对缓存并没有影响,所以将它放在你认为最合乎逻辑的地方。一旦上面的代码放到了控制器的方法中,页面就会被缓存。
由于CI存储缓存文件的方式,只有通过 view 文件的输出才能被缓存。在缓存文件产生之前,请确保 application/cache 文件夹可写。
如果你不再想使用缓存,仅需将上面的代码从你的controller里面删除即可。注意: 这样做并不能让缓存文件立即消失,它将会自动过期并被删除。如果你想立即删除那些文件,就必须自己动手了。