nDiki : Memcached
Memcached
設定ファイルいらずのハイパフォーマンス分散メモリオブジェクトキャッシュシステム。 Perl、PHP、Python、Java、Ruby、C#、C用のAPIが既に提供されている。
Memcached はメモリ上にキャッシュし特にファイルへ書き出したりしない。
拙作の WikiEngine 「WiKicker」も WikiPage の HTML 変換結果を Memcached 上にキャッシュする機能を備えている。
スポンサード リンク
Related term
2003年12月31日 (水)
■ Memcached

最近 deb パッケージになって知った Memcached がとても気になる。 シンプルなだけに、いろいろ活用できそうな感じ。
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- サーバの負荷が高くなったら DiKicker が 503 を返して沈静化を... (2007-04-05)
- [ WiKicker ] WikiPage のHTMLレンダリング結果のキ... (2004-02-14)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
- www.naney.org サーバ断続的にダウン (2006-04-30)
2004年1月12日 (月)
■ [ Perl ] Memcached を使ってみる

WiKicker の高速化に Memcached が使えないかいろいろいじってみる。 評価は今のところ「微妙」。 Memcached はメモリキャッシュを提供するデーモンプログラムで、キーと値の配列を記憶しておいてくれる。 Slashdot でも使っているらしい。
ホスティングサービスのサーバ(FreeBSD 4.4-RELEASE)に入れてみる。
@ Memcached 1.1.10
依存している libevent と一緒にビルドしてインストール。
cd /tmp wget http://www.monkey.org/~provos/libevent-0.7c.tar.gz tar zxvf libevent-0.7c.tar.gz cd libevent-0.7c ./configure make cd .. wget http://www.danga.com/memcached/dist/memcached-1.1.10.tar.gz tar zxvf memcached-1.1.10.tar.gz cd memcached-1.1.10 CFLAGS='-L../libevent-0.7c -I../libevent-0.7c' ./configure --prefix=$HOME/local/memcached-1.1.10 make make install
'-l' オプションがうまく動かない。
bind(): Can't assign requested address failed to listen /PRE
指定しなくても動くのでとりあえず、よしとする。
ちなみに、EVENT_SHOW_METHOD=1 の結果は以下の通り。
$ EVENT_SHOW_METHOD=1 ./memcached libevent using: kqueue
@ Cache::Memcached 1.0.11
Perl 用の API モジュールを入れておく。 make test でこける。
Your vendor has not defined Socket macro MSG_NOSIGNAL
use Socket qw(MSG_NOSIGNAL PF_INET SOCK_STREAM); のところ。 Solaris/*BSD だと駄目らしい。 CVS版だと解決されいるようなので、こちらを。
@ Cache::Memcached CVS
cvs -d :pserver:anonymous@danga.com:/home/cvspub checkout wcmtools/memcached/api/perl
でとってくる。 こちらは Perl 5.005_03 という古いバージョンでいくつか問題。
our $SOCK_TIMEOUT = 2.6;
のところの our は Perl 5.005_03 には無いので、use vars に置き換え。 use bytes も 5.005_03 に無いのでコメントアウト。
IO::Handle::blocking() も無い。
sub my_blocking {
my ($sock, $bool) = @_;
my $old_flags = fcntl($sock, F_GETFL, 0)
or die "Can't get flags for the socket: $!\n";
if ($bool) {
my $flags = fcntl($sock, F_SETFL, $old_flags | O_NONBLOCK)
or die "Can't set flags for the socket: $!\n";
}
else {
my $new_flag = $old_flags & ~O_NONBLOCK;
my $flags = fcntl($sock, F_SETFL, $new_flag)
or die "Can't set flags for the socket: $!\n";
}
return $old_flags & O_NONBLOCK;
}
...でいいのかな? ささっと書いたんで一部バグっているかもしれないが、とりあえず代替しておく。
ちなみに Cache::Memecached の古い版、MemCachedClient-1.0.7 も試してみたけれどこちらも IO::Socket::INET が必要だったり面倒(なので、1.0.11 のパッチ当ての方をがんばった)。
@ スピード
うーん。思ったほど速くないな。 いや手元のLinuxだとかなり速いんだけれど、FreeBSD だとそうでもない。 Client側の問題が大きいようだ。 下手するとLinux BOX からADSL経由でキャッシュを読み込む方が、FreeBSD のローカルホストから読むより速かったりする。
どうも Socket の接続/切断まわりでもたついている感じである。 (無駄なはずなのだが)毎回 disconnect_all してしまった方が、Benchmark の値が良かったりするし。 接続 -> キャッシュ取得 -> 切断 で 0.6秒というのはちょっと遅すぎる。 もうちょっといじってみれば実用的な速度になるのだろうか?
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- Berkeley DB 4.2.52 + DB_File 1.808 をホ... (2004-02-08)
2004年1月15日 (木)
■ [ WiKicker ] Memcached を使った検索結果のキャッシング

WiKicker の機能のうち、ヘビーな処理が必要なものの筆頭に検索機能がある。 今のところ単純に全ページに対してマッチング処理を行うのでページ数が増えるに従い遅くなってくる。 ロボットの総ナメが怖い*1ので NaneyOrgWiki では load average が 5 を越えたら一時的に検索機能が停止するようになっている。
そこで Memcached を使って検索結果をメモリキャッシュするようにしてみた。 本当はWikiPageのパース・レンダリング結果をキャッシュして、通常のページ表示を高速化したいと考えているのだが、今はまず影響の少ないところから(何でもいいから Memcached を使ってみたいというのが本音)。
で、実装してみた。 キャッシュがヒットすればすばやくレスポンスを返せるはずなのだが...やはり微妙だな。 速くなった気もするのだが、サーバの状態によってかなり遅い時もあるようだし。 まずはこれでしばらく運用テストしてみて、効果がありそうだったら他の部分にも適用することにしよう。
- [ WiKicker ] 古くても検索キャッシュを返す (2004-01-20)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- 私的10大ニュース2004 [ web ] (2004-12-31)
2004年2月1日 (日)
■ WiKicker 0.20 リリース

1ヶ月ぶりにリリース。 tDiaryテーマ対応・共有メモリ使用・Memcached使用など実験的なコードを沢山いれた。
- www.naney.org サーバ断続的にダウン (2006-04-30)
- [ WiKicker ] 憧れのサイドバー (2004-01-23)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
- [ WiKicker ] tDiaryテーマ互換モードの実装 (2003-12-29)
- [ DiKicker ] くっつき BBSをくっつけてみた。 (2004-05-04)
2004年2月14日 (土)
■ [ WiKicker ] WikiPage のHTMLレンダリング結果のキャッシュ

ようやく、HTMLレンダリング結果のキャッシュに着手。 cookie ベースでユーザ毎のカスタマイズ(名前やTZ)があるので、デフォルトのまま表示リクエストのみキャッシュが効くようにする。 キャッシュによる高速化を受けるのでは投稿してくれている常連ではなく検索エンジンから飛んできた一見さんということになるが、サーバの負荷が下がれば間接的に常連さんへのレスポンスも良くなるかと。
変換されたHTMLフラグメントをMemcachedにキャッシュ。 最初、キャッシュを有効にすると逆に遅くなってしまって「まいったな」と思ったが、リクエスト処理終了毎にdisconnect_all するようにしたら、キャッシュの効果を体感できるぐらいの速度が出るようになった。
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- DiKicker に grep 検索機能を追加 (2007-02-02)
- [ WiKicker ] Last-Modified: 実装準備 (2003-09-17)
- [ WiKicker ] Memcached を使った検索結果のキャッシング (2004-01-15)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
2004年2月15日 (日)
■ [ WiKicker ] Memcachedのメモリ使用量

現在 NaneyOrgWiki には946のページあるのだがHTMLフラグメントをMemcachedにキャッシュさせて、メモリ使用量が 24MBぐらい(検索結果キャッシュも含まれる)。 キャッシュの expires は2時間(AutomaticLinkが無効な時にキャッシュした場合は30分)。 こんなものかな。 現在 max 32MB で Memcached を起動しているけど、20MBぐらいにして積極的に古いのは削除させてもいいかもしれない。
- [ WiKicker ] Memcached を使った検索結果のキャッシング (2004-01-15)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- DiKicker に grep 検索機能を追加 (2007-02-02)
- [ WiKicker ] プレビューをレンダリング中も逐次出力するように (2004-05-03)
- 私的10大ニュース2004 [ web ] (2004-12-31)
2004年6月5日 (土)
■ [ WiKicker ] キャッシュまわりにバグ

Memcached まわりをいじったので、キャッシュ具合をテストしていたら変な現象が。 WikiPage が表示されるべきところに、検索結果が表示されている。 あれ?
@ ページの内容が表示されるところに検索結果が
WiKicker では WikiPage のレンダリング結果も検索結果もキャッシュしているが、それぞれ別のキャッシュキーになるようにしている (WiKickerのバージョンを $V とすると、'$V:h:ページ名' と '$V:s:検索語')ので混ざるはずがないんだけれどな。 キャッシュしているデータの形式も違うし。
最初は Memcached まわりのアップデートで不具合がでたのかと思ったが、戻しても変わらない。ということは、ずっと以前からこの問題が発生していたのか。 やば。 設定でニックネームを設定している(cookie に保存している)と、その Web ブラウザに対してはキャッシュ機能が働かないようになっているので発見が遅れてしまった。
で結局コードをチェックしてみたら「WikiPage 表示と検索結果表示の View クラスを同じにしていたため、検索結果のレンダリングが WikiPage レンダリング結果と同じ領域にキャッシュされる」という風になってしまっていた。 ということで誰かがページ名で検索するとそれがキャッシュされてしまい、ページを読もうとしてもキャッシュ破棄されるまで検索結果が表示されてしまうというひどい状況になっていたと。
修正。
@ キャッシュキーのバグ
Memcached の出力をチェックしていたら、たまにエラーが起きていることを確認。 Memcached のプロトコルをチェックしたら、キーには制御文字と空白は使えないとある。 Cache::Memcached を見たらキーはそのまま through するだけ。 ということでページ名に空白が含まれている場合などの時には、まずい事になっていたようだ。 こちらは、キーを自前でエンコーディング(ページデータベースファイル名の作成に使っている base64 の亜種)するように修正。
- [ Perl ] Memcached を使ってみる (2004-01-12)
- [ WiKicker ] WikiPage のHTMLレンダリング結果のキ... (2004-02-14)
- [ WiKicker ] Memcached を使った検索結果のキャッシング (2004-01-15)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- [ WiKicker ] 古くても検索キャッシュを返す (2004-01-20)
■ Cache::Memcached 1.13 の Perl 5.005_03 対応

WiKicker で使用しているキャッシュシステム Memcached 用の Perl API Cache::Memcached が新しくなっていたので、入れ換え。
1月に入れた時と同様、Perl 5.005_03 ではそのまま動かないので一部を修正。 前回はCVSスナップショット(Memcached.pm revision 1.8)に対する修正だったので手元で修正しただけだったが、今回はパッチも作っておく。
修正点は
- our を使わないようにする。
- fields::new を代替コードに。
- IO::Handl::blocking を代替コードに。
- use bytes を使わないようにする。
といったところ(WiKicker で使っているところのみ修正)。
以前は Use of uninitialized value がかなり出ていたのだが、 Cache::Memcached のコード自体が綺麗になったのかこれらも出なくなっていい感じ。
- Cache-Memcached-1.13-5.005_03-20040605.diff
- Cache-Memcached-1.13 ディレクトリのある場所で patch -p0 < パッチ
- [ Perl ] Memcached を使ってみる (2004-01-12)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- Cache::Memcached 1.14 の Perl 5.005_03 対応 (2004-07-31)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
■ Memcached 1.1.11

Perl API (Cache::Memcached)のアップデートのついでに、Memcached 自体もアップデート。
cd /tmp wget http://www.monkey.org/~provos/libevent-0.8.tar.gz tar zxvf libevent-0.8.tar.gz cd libevent-0.8 ./configure make cd .. wget http://www.danga.com/memcached/dist/memcached-1.1.11.tar.gz tar zxvf memcached-1.1.11.tar.gz cd memcached-1.1.11 CFLAGS='-L../libevent-0.8 -I../libevent-0.8' ./configure --prefix=$HOME/local/memcached-1.1.11 make make install
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- はてなダイアリーキーワード自動リンクAPI (2004-02-05)
- MAILPIA による Twitter リプライチェック (2008-11-18)
2004年7月3日 (土)
■ [ WiKicker ] 分あたり100アクセスオーバー

たまにあるテレビ放送後の猛烈アクセス。
RecentLogでチェックしてみたところ、1分あたりの処理数が100を超えていた。 ここ最近は、いっても40台だったから驚き。
レスポンスは悪かったものの load average は極端には上がっていなかった。SpeedyCGI のパラメータの調整がいい感じだったようだ。 ほとんど(編集ではなく)閲覧のみのアクセスだったことで、Memcached によるキャッシュもかなり有効に働いていたと思われる。
- [ WiKicker ] WikiPage のHTMLレンダリング結果のキ... (2004-02-14)
- [ WiKicker ] Memcached を使った検索結果のキャッシング (2004-01-15)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
2004年7月31日 (土)
■ Cache::Memcached 1.14 の Perl 5.005_03 対応

1.14 が 7月27日にリリースされていたのでパッチ作成。 1.13 用のパッチがあたったのでそのままいけるかなと思ったが、テストしたところまたいくつかの非互換コードが増えていたのでそれらの修正を行う。
tar zxvf Cache-Memcached-1.14.tar.gz
cp -a Cache-Memcached-1.14 Cache-Memcached-1.14.orig
patch -d Cache-Memcached-1.14 -p1 \
< Cache-Memcached-1.13-5.005_03-20040605.diff
find Cache-Memcached-1.14 -name '*.orig' -exec rm {} ';'
emacs Cache-Memcached-1.14/Memcached.pm
LC_ALL=C TZ=UTC0 diff -Naur \
Cache-Memcached-1.14.orig Cache-Memcached-1.14 \
> Cache-Memcached-1.14-5.005_03-20040731.diff
新規修正点は
- Socket モジュールでのインポートで IPPROTO_TCP が追加になったところが実験環境でエラー。コードの中では利用していないので削除。
- ChangeLog 中の下記のため @+ を使うようになったようだが、5.005_03 では定義されていないのでエラー(perl.*delta のどこにものっていないのでチェックに苦労。perlretut に言及があって Perl v5.6.0 から提供されるようになった事を確認)。Cache::Memcached 1.13 で行っている pos を使った処理に戻す。
2004-07-19
* don't use pos() because it doesn't seem to work in
taint mode. use $+[0] instead. (Dave Evans <..@djce.org.uk>)
それからパッチの作り方を変更。patch の man の通り LC_ALL=C TZ=UTC0 にするのとオプションを -Naur を使うように。
また 1.14 から String::CRC32 が必要になった。
- Time::Local::gmtime の範囲チェック (2003-12-23)
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- 最新の Module::Install は Perl 5.005_03 ステ? (2006-04-29)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
2004年12月31日 (金)
■私的10大ニュース2004 [ comp ]

@ cool programs
- pdumpfs
- Memcached
- 簡単・高速なキャッシュシステム。使える。
- Firefox
- Subversion
- 将来的に CVS から移行する事を考えて試験的に導入。良い。Windows でも TortoiseSVN のおかげで簡単に利用できる(CVS にも TortoiseCVS が出て便利になった)。
- 影舞
- 今年前半のプロジェクトで活躍。
- PAR
- NSIS
- Template Toolkit
- Webアプリケーション開発プロジェクトで採用。www.naney.org の静的コンテンツの生成でも使い始めた。
@ Palm OS 生活復活
PEG-TJ25を購入し、Palm OS 生活復活。 最初はおもちゃのつもりで買ったのだが、プロジェクトマネジメントなどにシフトした仕事のスケジュール管理などで大活躍。
PDA 市場の明るい話はあまり聞かないが、末長く製品が出て続けて欲しい。
- Module::Build でソースパッケージング (2005-08-24)
- DAR で差分/増分バックアップ (2005-04-02)
- SCons は GNU Autotools のかわりになるか (2005-04-20)
- JSmooth で Win32 上でのJava プログラム起動ファイル作成 (2004-12-06)
- JAlbum で Webフォトアルバム (2004-11-14)
■ 私的10大ニュース2004 [ web ]

今年の大事件、マイブームなど。
@ Web 日記を DiKicker に。
2月22日に hns から DiKicker へ移行。 自分で開発しているので好きなように改良ができて楽しい。 比較的すんなり安定したので最近はあまりコードをいじらず。
@ WiKicker 安定。後半は spam がひどい。
WiKicker の方も安定し、(管理をのぞいて)必要な機能もだいたい実装された感じ。 秋ぐらいから NaneyOrgWiki の方にも spam 的な書き込みが多発。 パターンによる書き込み拒否の実装で年末それなりに収束しつつある感じ。
@ SNS
orkut、mixi に登録。 前者はそれほどはまらずフェードアウト。
mixi の方は結構面白い。
というのが遊んでみるのに良かった。
ついついチェックしてしまうのは
の存在。 オフィスで広まったことで楽しさも増した。
来年の今ごろも継続しているだろうか? 今後カスタマイズ機能とかが充実してくれると嬉しい。
(SNSではないが)Gmailの方は登録したけどまだ活用できていない。
@ Google AdSense
導入。 USの小切手からの入金用にシティバンクの口座を開いたものの、シティバンクには数ヶ月後に4拠点閉鎖の命令がくだるなど安心できない状況ではある。
- mixiに登録 (2004-11-19)
- 私的10大ニュース2003 (2003-12-31)
- mixi 用として DiKicker に RSS生成機能を追加 (2004-11-21)
- 21:00 [ nDiki ] hnsからDiKickerへ (2004-02-22)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
スポンサード リンク
■よく検索されるキーワード
perl(62) torrent(54) linux(48) 提案書(47) windows(43) 書き方(41) 使い方(29) アジェンダ(26) x31(25) 充電式カイロ(25) cvs(22) インストール(20) サンプル(20) thinkpad(19) アジェンダとは(19) f-01a(18) wiki(17) c#(16) 感想(16) カイロ(16) usb(16) java(16) 秋葉原(15) debian(15) ヨドバシカメラ(15) subversion(15) 壁紙(15) 作り方(15) 静電気(14) apache(14) グッズ(14) デロンギ(13) フリー(13) sh-01a(13) ganttproject(13) 修理(13) ssh(12) svn(12) ヨドバシ(12) truecrypt(12) ダイソー(11) 手帳(11) activeperl(11) ubuntu(11) ほぼ日手帳(11) firefox(10) mew(10) mp980(10) ドラマ(10) 日本語(10) n-01a(10) google(10) tc-1(10) 評判(10) ツール(10) djunit(9) cgi(9) 動画(9) mp3(9) オイルヒーター(9) docomo(9) rcs(9) 除去(9) centos(9) メモリ(9) エネループ(9) 設定(9) p-01a(9) tortoisesvn(9) 無印(8) ケース(8) 口コミ(8) ミノルタ(8) メール(8) インストーラ(8) 会議(8) xampp(8) 加湿器(8) af(7) 値段(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 15.118595s / load averages: 1.97, 1.16, 0.64
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク