忍者ブログ

開発者ブログ

忍者ブログの元開発者が送る愛と感動と涙のスペクタクル。プログラムの開発日誌やタダの日記です。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

mod_cacheとかmod_disk_cacheとかmod_mem_cacheとか

こんばんわ。misneyです。

土曜日はお休みでした。
金曜日にGさんとЯYUさん、Big Buddhaさん、aluさん、J2xCさんらと飲みに行き、結構遅くまで飲んでいたせいか夕方まで寝てました。

さて、この間の休みもそうだったんですが寝すぎで寝れません。
この時間に寝れないと暇で仕方ないのです。

と、いうことで今日はキャッシュについて話したいと思います。

キャッシュが大好きな件

僕はこのキャッシュと言うのが大好きです。
プログラムで扱うキャッシュも、給料日後に増えるキャッシュも。

普段プログラムを書く時に、なるべく効率の良いキャッシュを考えながら作るのです。

・クライアントサイドのキャッシュ
 訪問者のPCにデータを保存させていただく
・ページキャッシュ
 URL毎に生成されるHTMLデータを保存しておく
・コンテンツキャッシュ
 HTMLのブロックごとにHTMLデータを保存しておく
・クエリキャッシュ
 データベースから取得した結果を保存しておく

こんな感じのキャッシュが存在するのかな?と思います。

この辺のどれを使うかを、コンテンツの内容や色々な場面に応じて考えます。
mod_cacheはページキャッシュになると思うので、ページキャッシュのお話になります。


mod_cacheについて

httpdは基本的にapacheを使用しています。
apacheは非常に多くのモジュールが存在していて、いろんな機能を使うことが出来ます。

その中の mod_cacheについて書いてみたいと思います。

mod_cacheは、動的に生成されるページなどをキャッシュしてそれを表示してくれるような機能を持っています。

キャッシュの仕組み

絵に書くとこんな感じ。すいません。絵心が無くて。

言葉で説明すると、下のようになるんです。

 ・訪問者がHTTPリクエストを送る
 ・mod_cacheがキャッシュの有無やリクエストヘッダを見て、キャッシュを使うか判断
 ・キャッシュを使っちゃおう!の場合はキャッシュデータを送り返す
 ・キャッシュは使わない って時は動的にページを作成

要は表示スピードが早くなるんです。
サーバーコストを下げることが出来る ⇒ ランニングコストが安くなる!
こんな恩恵が頂けるのです。

このキャッシュは以下のような場合に使えます。

 ・PHPやperlなど、動的に作成されるページ
 ・更新頻度が低い、もしくは一定時間ごとに更新される
 ・他のページとの整合性を取らなくても良さそう

例えば、リアルタイムにページの情報が更新されるような場合にはあまり使えないということ。
HTMLなど静的な場所にはあまり使えないということ。
(memoryを使えば少し恩恵がいただけるかも)

mod_cacheはmod_disk_cacheとmod_mem_cacheのいずれかの方法を選ぶことが出来ます。
名前のまんまですが、HDDを使うかmemoryを使うかって話ですね。

余談ですが、私はメモリを使ったキャッシュが大好きです。
memcachedを始めとして、色々と使っています。
最近はtmpfsを使うのが自分の流行です。

mod_disk_cacheとmod_mem_cache

さて、mod_disk_cacheとmod_mem_cacheのどちらが良いかというと、好みの分かれるところだと思います。

mod_mem_cacheで検索をかけて見つけたなんとなく@さんのページを拝見すると、どうもプロセス毎にキャッシュを生成するとのこと。
マルチスレッド MPMを使うといいんじゃない?ってなことが書かれていますが、PHPを使っていると、あまりworkerは使わない気がします。
非推奨とされているからですね。

私としては通常はmod_disk_cache。リバースプロクシとして使う場合はmod_mem_cacheかなーって考えてます。

mod_disk_cacheの動き

さて、mod_disk_cacheを使うと、以下のような2つのファイルがCacheDirLevels で設定した階層の下に作成されます。

hA.header
hA.data

これらはURLからキーを生成して自動的に作成されます。
2回目以降はこのファイルを使ってくれて、プログラムには渡されないって動きになります。

headerには応答ヘッダが、dataの方にHTMLデータが入っています。

プログラムが動かないから早いんですよ!って動きなのです。

動作検証
実際どれくらい早さが違うかをabを使って調べてみます。

mod_disk_cacheを使った場合
Requests per second: 745.71 [#/sec] (mean)

Smartyのキャッシュ機能を使った場合
Requests per second: 223.36 [#/sec] (mean)

何も使わない場合
Requests per second: 32.82 [#/sec] (mean)

大体こんな感じの結果でした。
Requests per secondは、1秒間に何回のリクエストを受け付けられるかって感じの数字です。確か。
なので、数字が大きいほど良いってことになります。

何も使わない場合の20倍。Smartyキャッシュの3倍ほど早いってことですかね。

ちなみに、何も使わない場合でも、コンテンツキャッシュを使っている状態です。データベースへの接続や計算などが無い状態ですね。
それだけ高速化されるということなのです。

キャッシュの選び方?
場面においてはmod_disk_cacheを使った方がいいってな結果だと思います。

Smartyのキャッシュもとても便利な物で、場面次第ではmod_disk_cacheより使い勝手が良いかも知れません。
任意に削除が出来る点が良いですね。

ただ、Smarty自体が重いのが懸念点で、独自にキャッシュシステムを作ってしまったり、常にLastModifiedを出したりした方が良いのかなーって思います。

mod_disk_cacheも場面によっては・・・ということに気をつけないといけません。
例えば1日一回の更新を行う様な場合はとっても簡単。
更新したら全てのキャッシュファイルを削除してしまえば良いのです。

逆にコメントを送信することが出来るページなど、いつ更新されるか解らないページにはあまり使えません。

コメントを送信した後もキャッシュされた情報(古い情報)を表示してしまう為、投稿したはずのコメントが表示されない。なんて問題が発生してしまう為です。

下手をすると逆にオーバーヘッドになってしまったり、おかしな動作をしてしまうキャッシュですが、上手く使えるように日々精進したいと思います。

最後に

私は良く間違ったことを書きます。
参考程度に読んでいただければと思います。

また、間違いなどがあったらご指摘を頂けると幸いです!

拍手[2回]

PR

ぱんぱんミュージック

こんばんわ。misneyです。

今日は会社を休んでしまいました。
どうも体調が良くなりません。
まだ医者にも行ってません。

今日こそ医者に行こうかなーと思ったのですが、しばらく寝ていたら咳が大分良くなったので、このまま寝てたほうがよくなるかな?と思って。
20時間くらい寝ました。

これで治ってしまいますように。

さて、寝すぎたら眠れなくなってしまいました。
咳は良くなったのですが、どうも熱が出てるっぽい。
異常に暑い。

さすがに二日連続では休めないので、とりあえずインターネットを見ることに。

なんか、ぱんぱんミュージックってのが出来たみたいですね。
ダンスダンスレボリューションやビートマニアを手がけた南雲さんて方が経営する会社さんが作ったみたいですね。



なかなか面白そうな感じで、とても流行りそうです。

拍手[0回]

デザイン天下一武道会

こんばんわ。
再びmisneyです。

引き続き仕事をしてまっす。
今はSAMURAI RADIOを聞きながら自宅でお仕事中です。

ひっさしぶりに聞きました。
私は第一回に参加させてもらったのですが、あの時と比べると、とってもラジオっぽくなってますね。
3人とも凄いなーって思います。

さて、そのSAMURAI RADIOでデザイン天下一武道会のお話をしてたので、その件に触れてみたいと思います。

みなさん、アクセスカウンターって利用してます?
自分のブログやWebページに、何人の人が訪れてくれたかを数えるツールです。
NINJA TOOLSでは忍者カウンターというカウンターがあるんです。
ここを訪問してくださっている方はご存知だとは思いますが。

この忍者カウンターは、他所ではあまりお目にかかれない、自分でデザインが出来てしまう機能があるんです。

私もWebページを作り始めた頃は、レンタルのカウンターを探したりしたんですが、どうも「コレ最高!」ってカウンターが見つからないんですよね。
結局自分で作ってしまった気がします。

そんな時に便利なのが、コレですよ。忍者カウンター。

簡単な画像編集ツールがあれば、ちょちょいのちょいで作れちゃいます。


こんな感じのPNG画像を作ってしまえばいいんです!


そして、皆さんがデザインされたカウンターの中から、秀逸さの天下一を決めるイベントが、デザイン天下一武道会なんです!

去年(間違えました)一昨年はブログのテンプレートアワードなんかがあったりしたのですが、皆様にデザインを作成してもらって、皆様の投票結果を元に優れたデザインを表彰しましょうーってな武道会です。

デザインに自信のある方から、自信ないけどやってみようかなー?なんて人まで、どしどしご応募いただけたらと思います。

天下一武道会
天下一武道会はこちら

デザインの募集期間は2008年6月いっぱいまで。
投票期間は7月1日~7月15日までです。



ちなみにテンプレートアワードの入賞者の中には、サムファクに入社する前のrayさんの作品があったりするんですよ。

テンプレアワード結果のページはあえてリンクしておかないので、気になる方は探してみてください!

拍手[0回]

おうちでお仕事。

こんばんわー。
misneyでっす。

最近、風邪?をひいてるんです。
10日くらい治らないのです。
ずっと咳が出るのです。

百日咳が流行ってるっていうので、それかなー・・・と思っているのですが、どうなんでしょう。
近々病院に行こうと思ってます。

さて、そんな調子だったのですが、昨日は会社の皆さんと高尾山に行って来ました。

登山です。登山。1年ぶりです。
おーゆきさん、$CHさん、yanmaさん、Aluさんの5人で行って参りました。

1時間程度の登山だったのですが、結構ぐったりでした。
この体力の無さはかなりまずいです。
夏には富士山ツアーが開催される予定。
それまでに体力を付けたいと思いました。

今は咳で眠れないので、少し会社の仕事をしてます。
忍者podヨヨヨの番組、TAKANORI RADIOを聞きながら仕事をしてるのです。自宅で。

自宅なのに会社にいる感じです。
自宅で仕事をする時は、あまり聞かない方がいいかも・・・と思いました。

私が自宅で仕事する時は、サービス公開が間近な時なのです。
近日中に、一つのサービスを公開する予定なので、全国1億5千万人のmisneyファンの皆さんは楽しみにお待ちください。

拍手[0回]

Aluさんのブログパーツ

こんばんわ。misneyです。

4月から入社されたAluさんによるブログパーツが5月29日に公開となりました。
SQUiパーツとしての公開です。


このブログの右上に付いてる奴が作成物です。
お好きな画像をおかしな動きで書いてみようってなツールなのです。

物は試しに、ちょいと動かしてみてください。
どうですか? SQUiパーツは相変わらず奇抜ですか?

ちょっとCPUパワーを使うのがアレなんですが、動きは実に楽しいのです。
もし気に入っていただけたら、コッソリ大胆に使ってみてくださいね!

これから続々とAluさんの作品が世に出てくると思います。
Aluさんの活躍にご期待ください。

拍手[0回]

画像RSS

おまとめボタン

忍者カウンター

忍者ビジター

忍者アド

ブログ内検索

最新コメント

プロフィール

HN:
mizuno
HP:
性別:
男性
職業:
主に侍などを少々
趣味:
競馬
自己紹介:
母子手帳の仮死と書かれてる場所に丸されてます。

フリーエリア

忍者ツールズプロフィール

忍者ツールズプロフィールは終了しました