更新パターンが有効なのは、元のサーバからのExpiresヘッダが存在しない場合、あるいは利用する更新パターンにignore-expireオプションが含まれる場合である。次の例を見てみよう。
refresh_pattern -i \.gif$ 1440 20% 10080.
これは次のような意味になる。
- 1)名前が「.gif」または「.GIF」で終わるオブジェクト(つまりgif画像ファイル)のいずれにもExpiresヘッダがない場合は2)に進む。それ以外の場合は6)に進む。
- 2)保存時間(オブジェクトがキャッシュサーバ上にある時間)が1,440分未満の場合は、まだ新しいオブジェクトと見なしてそれを渡し、処理を終了する。それ以外の場合は3)に進む。
- 3)保存時間が10,080分より長い場合は、古いオブジェクトと見なして元のサーバにアクセスして新しいコピーを取得し、処理を終了する。それ以外の場合は4)に進む。
- 4)保存時間が1,440~10,080分の場合は、lm-factorを使ってオブジェクトの鮮度を判断する。lm-factorは、キャッシュサーバ上でのオブジェクトの保存時間を、元のサーバにおけるそのオブジェクトの作成または変更からの経過時間で割った値である。たとえば、元のサーバで10,000分前に作成されたオブジェクトが、キャッシュサーバ上に1,800分(=保存時間)に保存されている場合、lm-factorは1,800/10,000 = 18%となる。
- 5)lm-factorが更新パターンの指定パーセント値(=20%)より小さい場合、新しいオブジェクトと見なして渡し、処理を終了する。それ以外の場合は6)に進む。
- 6)古いオブジェクトと見なし、元のサーバにアクセスして新しいコピーを取得する。
動画や画像、音声、実行ファイル、アーカイブなど、ファイルの名前が同じであればその内容にも変化がないことがほとんどであるオブジェクトの場合は、更新パターンを変更して新しいオブジェクトの基準を甘くすることで、キャッシュのヒット率を上げることができる。たとえば、上記の更新パターンは、次のように変更できる。
refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 ignore-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90% 432000 ignore-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 ignore-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.index.(html|htm)$ 0 40% 10080 refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320 refresh_pattern . 0 40% 40320
少なくとも我々には理解しがたい行為だが、元のサーバ側(youtube.comなど)があらゆる手を尽くしてコンテンツのキャッシュを困難または不可能にしようとしている場合がある。上記のオプションは、こうした制限の克服に役立つだろう。
更新パターンは、すべての要求に対して、該当する規則が見つかるまで上位のものから順にマッチングが行われる。最後の規則はキャッチオール規則で、上位の規則のいずれにも当てはまらなかった要求はすべて、この規則とのマッチングが行われる。通常、FTPやgopherといったほかのプロトコルについては、デフォルトのキャッチオール規則をリストの最上位に別途用意し、下位の規則とのマッチングが行われないようにしておく。
