web-dev-qa-db-ja.com

特定のビューのキャッシュを無効にするにはどうすればよいですか?

特定のビューのキャッシュのクリアを開始するために特定のビューを無効にする必要がある状況に直面しています。

views_invalidate_cache()は、サイト上のすべてのビューについて、キャッシュされたすべてのビューデータをクリアします。

モジュールコード内から特定のビューのキャッシュ無効化をトリガーするにはどうすればよいですか?

8
sheldonkreger

あなたが探している関数はビューキャッシュプラグインの cache_flush だと思います。

3
Coleman

クリアするビューの名前がわかっている場合は、次のような関数を呼び出して、そのビューに固有のキャッシュをクリアできます。

/**
 * Function to invalidate selected views caches to enable the action forms to work
 */
function mymodule_invalidate_views_cache($view_name) {
  cache_clear_all('ctools_export:views_view:' . $view_name, 'cache_views', TRUE);
  cache_clear_all($view_name, 'cache_views_data', TRUE);
}

これは、ビューキャッシュが有効になっている(コンテンツキャッシュを使用している)ときに、構成フォームを持つVBOアクションが機能できるようにするために必要でした。これを2回呼び出しました。1回は関数mymodule_myaction_form()で、もう1回は関数mymodule_myaction_submit()で呼び出しました。

10
jlscott

ビューコンテンツキャッシュ の使用を検討してください。

通常、関連するコンテンツが追加または更新されたときにビューのキャッシュを自動的にクリアするために使用されますが、キャッシュセグメントを監視するためのフレームワークを提供します。私はこれをしていませんが、 developer docs を利用できます。

1
Dave Bruns

プロジェクトを見てみましょう Cache Actions 。それはまさにあなたが望むものを行います。状況に応じてルールを使用できる場合は、カスタムコードを作成する必要さえありません。モジュールをそのまま使用して、特定のビューのキャッシュをクリアするルールを設定するだけです。それ以外の場合は、ビューキャッシュをプログラムでクリアするためのガイドとしてどのように機能するかの内部を確認してください。

1
Coleman

余計に推測するのではなく、ワニスのようなリバースプロキシキャッシングシステムを検討しましたか?これらは驚くべきパフォーマンスをもたらし、ビューやノードなどのdbキャッシングをいくぶん無効にします(多くのログインユーザーがいて、それらのためにこのキャッシングが必要な場合を除きます)。

0
Coleman