キャッシュのクリア方法について

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
gg45's picture

いつもお世話になります。

現在独自でモジュールを制作していて
nodeのフィールドをupdateするため、db_updateでupdate処理をしているのですが
データ自体の更新はできたのですが、キャッシュクリアをしないと、表示で反映されない状態になっております。

そのため、drupal_flush_all_cachesで処理のたびにキャッシュクリアをしているのですが
キャッシュのクリアに時間がかかってしまうのがネックとなっております。

なるべく処理の時間を短くしたいのですが、何か良い方法はありますでしょうか。

また、cache_clear_allという関数も発見したのですが、こちらはdrupal_flush_all_cachesとは何が違うのでしょうか。

お手数をおかけいたしますが、ご助言いただけますと助かります。
よろしくお願いします。

Comments

blauerberg's picture

なるべく処理の時間を短くしたいのですが、何か良い方法はありますでしょうか。

DrupalDefaultEntityController::resetCache [1] を使うと、
IDを指定して特定のエンティティ(ノード)のキャッシュだけをクリアできるので、
クリア時間の短縮が可能です。

このAPIは、Webからノードを保存した時に実行される node_save でも呼び出されています。
使い方は module/node/node.module:L1190 辺りを参考にしてください。

    // Clear the static loading cache.
    entity_get_controller('node')->resetCache(array($node->nid));

また、cache_clear_allという関数も発見したのですが、
こちらはdrupal_flush_all_cachesとは何が違うのでしょうか。

ざっと見た感じ、前者はページやブロックのキャッシュだけをクリアし、
後者はcssやjs、テーマのキャッシュなどもクリアするようです。
ちなみに、drupal_flush_all_caches 中で cache_clear_all も実行されます。

gg45's picture

ご連絡ありがとうございます!

こちら利用したら大分早くなりました!
本当にありがとうございました!

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week