で結構な数のツッコミをいただいた(ありがとうございます).
大体の意見をまとめると.
「そんなのとっくにあるよ.」
というものであった.全部を調べたわけではないが,WordPressとHNSとMTのキャッシュシステムのソースを調べてみるとキャッシュ削除の実装としては下記のような感じだった.
- 毎回DBにアクセスしてキャッシュファイルとlastmodifiedの比較を行う(MT,HNS).
- Blogレコードのセーブ時のコールバックでキャッシュファイルを消す(WP?).
1だとWebサーバが複数台でDBが1台だとアクセスがDBに集中
しちゃうので,あまり好みではない
(DBの負荷に関してはリプリケーションを作ればいいという
意見もあるだろうが,不慮の時に備えてできればサーバは
いきなり投入したい).
で、もっと手軽にできないものかとmod_proxyとmod_disk_cacheを使う方法を考えてみた.
この方法だとキャッシュファイルをWebサーバ側に作ってくれるが,キャッシュファイルが
URLにHashをかけたものなので、デザインテンプレートファイルを変更したときなど,
あるディレクトリ以下(例えばhttp://d.hatena.ne.jp/yamaz/)のキャッシュファイルを
全部消したいときに一気に消せなくてめんどくさい.
というわけでmod_disk_cacheを改造してみた.
通常のmod_disk_cacheの設定に加えて
CacheFileNameType asis
を加えることによって,オリジナルURLと同じディレクトリ構造のままファイルを
キャッシュしてくれるようになり,単純にrm -rでキャッシュファイルを削除できるようになる.
使う人がいるとも思えないですが,apache2.2用のpatchをとりあえず置いておきます.
http://scaleout.jp/tmp/apache2.2_cache_filename_asis.patch (apache2.2.0用)
http://scaleout.jp/tmp/apache2.2.3_cache_filename_asis.patch (apache2.2.3用)
注意点としてはmod_disk_cacheはURL?.data,URL?.headerというファイルを
キャッシュファイルに作るので,名前がぶつからないようにしてください.
またキャッシュを行うWebサーバが複数あるときに消しにまわるのが大変と
いうデメリットがあることも忘れずに.
キャッシュファイルを消す奴は勝手に作ってください:D
(おしまい)
あわせて読みたい
NI-Lab.'s ヅラッシュドット:Apache + mod_proxy + mod_cache + mod_disk_cache によるリバースプロキシの導入
http://www.nilab.info/zurazure2/archives/000269.html
積み重ねた日々: mod_proxy_balancer + mod_disk_cache on Apache 2.2.3
http://d.hatena.ne.jp/solitary_shell/20060830/1156922123
Apacheモジュール プログラミングガイド (Advanced Server‐side programmingシリーズ)
- 作者: 小山浩之
- 出版社/メーカー: 技術評論社
- 発売日: 2003/08/01
- メディア: 単行本
- 購入: 1人 クリック: 81回
- この商品を含むブログ (26件) を見る
apacheでモジュールを書くなら外せない一冊.
対象はapache1.3だけどapache2もフォローしてます.
apache2バージョンも正式に書いてくれないかなぁ(ぽつーり).
yamaz的日常
http://rubyist.g.hatena.ne.jp/yamaz/20070107
でも書いたけど,奥さんにデブであることを責められたので,
去年の暮れからまじめにプールに通ってる.私の行くプールは
本気印の人が多いので,適当な人を仮想ライバルに仕立て上げて
泳ぐことで効果を高めている.
トライアスロンの選手はswimで3.8kmを泳ぐようなので,
とりあえず一回のプールで3.8km泳げるようにがんばりたい
(今は2kmくらい).
と思っていたら外耳炎にかかってしまって,しばらくお休み.
耳栓を強く耳に突っ込んでたのがいけなかったようなので、
今後は気をつけたい(´・ω・`).