インターネットのサービスをやってると、大体ピークは夜10時~12時くらいで、
朝方とかは結構スカスカだったりします。# 仮想化とかの議論は置いておいて、、
memcachedによって性能は担保したいけど、
ココってタイミングではリアルタイムでデータが反映されないと困る
なんていうシチュエーションは、いろんなところにあるんじゃないかと思います。
今回は運良く?そのタイミングが朝方だったので、そのタイミングで初期化してしまうことにしました。
【使ったもの】
libmemcached(http://sourceforge.jp/projects/freshmeat_libmemcached/)
これを使うと以下のようなコマンドがインストールされます。
memcapable
memcat
memcp
memdump
memerror
memflush
memrm
memstat
インストールはtarを解凍してconfigureしてmakeしてmake installするアレです。
↓ここら辺が参考になります。
http://l-w-i.net/t/memcached/0install_002.txt
【使い方】
簡単です↓だけ。サーバは複数指定できます。
./memflush --servers=サーバ:ポート
【ピヨったところ】
↓消してみたんです。
=======
$ ./memflush –servers=localhost:11211
$ echo $?
0
=======
消えたかなぁと思ってdumpしてみたら、、
=======
$ ./memdump –servers=localhost:11211 | wc -l
30505
=======
ちょ、全然消えてないじゃん的な。
もっと細かくみてみるかなと思ってmemstat叩いたら、、
=======
$ ./memstat –servers=localhost:11211
Listing 1 Server
Server: localhost (11211)
pid: 23442
uptime: 695770
~略~
curr_items: 30505
=======
dumpした時と同じ件数なんすけど・・・
ってことで、ダメ押しでmemcat。
memflushする前は値が取れます。
========
$ ./memcat –servers=localhost:11211 HOGEHOGE
[{“hoge”:null,”hage”:0,”hogeType”:1″hogehogeList”:[{以下略~
========
memflushしてやって、
=======
$ ./memflush –servers=localhost:11211
=======
その後は値が取れません~
========
$ ./memcat –servers=localhost:11211 HOGEHOGE
memcat: HOGEHOGE not found
========
なんかアクセスした時に、どっかの領域から削除されて
dumpとかの対象から外れるっぽいんですよね。
memdumpして値が取れてたのに、
========
$ ./memdump –servers=localhost:11211 | grep HOGEHOGE
HOGEHOGE
========
memcatしてやって取れなくなったら、
========
$ ./memcat –servers=localhost:11211 HOGEHOGE
memcat: HOGEHOGE not found
========
dumpしても取れなくなりました。
========
$ ./memdump –servers=localhost:11211 | grep HOGEHOGE | wc -l
0
========
なんだか紛らわしいのぅ。
まぁやりたい事やれそうなので良かったですが。
コメント
どうもっすー!
恐らく、恐らくなんですが
phpのmemcacheライブラリAPI見るに、
http://www.php.net/manual/ja/memcache.flush.php
↓抜粋
Memcache::flush() は 実際にリソースを開放するわけではなく、単にすべての項目に 有効期限切れのマークをつけるだけです。
↑抜粋
ようするに、データそのものをクリア(?)するわけではないようです。既知でしたら流していただければー。
お。toriyasu!!
コメントサンクスです〜
うん。哲センセがソースみてフラグ立ててるだけですねーって言ってやしたw
続きは明日のPHP読書会で。。