「SAVACAN」担当のMKです。
今回はMemcached利用時のキャッシュヒット率について取り上げたいと思います。
Memcachedはセッションデータ管理やクエリキャッシュ、htmlや画像のキャッシュなどによく使われていますのでご存じの方も多いと思います。
Memcachedを運用している際、キャッシュの利用料やヒット率を確認したい場面も多いです。そんな時に便利な方法をご紹介します。
まずMemcachedにはどのような特徴があるかから見ていきます。
Memcachedの特徴
Memcachedには以下の特徴があります。
- データをメモリに保存する。
- メモリを活用するため、シークタイムの遅延がなく非常に高速。
- メモリ上にデータを保存するため、memcachedやサーバー本体の再起動によりデータが全て消える。
- データ保存容量が設定値を超えるとLeast Recently Used(LRU)により古いキャッシュから順に消去されます。
Memcachedと同じインメモリのKVS(key-valueストア)にRedisというものもありますので少し比較してみたいと思います。
key-valueストアとは
データをキーとバリュー(値)のペアで格納するNoSQLデータベースです。
MemcachedとRedisの比較
Memcached | Redis | |
---|---|---|
処理性能 | シンプルで高速 | 十分高速だが、 多機能が故わずかなオーバーヘッドあり |
対応するデータ型 | String(文字列)のみ | Strig以外にもList、Set、Sorted Set、 Hashなど多数のデータ型に対応 |
データ保存 | 揮発性のため、 再起動によりデータは消失 | Diskへ保存する事で データの永続化が可能 |
ユースケース | キャッシュ専用 | キャッシュ他、 データベースやメッセージング |
Memcachedでキャッシュのヒット率を確認する
Memcachedのヒット率を外部ツールなしで確認する場合、標準の[stats]コマンドで確認できます。
[telnet]でMemcachedサーバーに接続し[stats]と入力して[Enter]を押すだけです。
statsコマンドを実行するとずらーっと結果が出てきます。
[root@mem ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 841
STAT uptime 29277891
STAT time 1726189304
STAT version 1.5.22
STAT libevent 2.1.8-stable
STAT pointer_size 64
STAT rusage_user 53099.579411
STAT rusage_system 155694.392005
STAT max_connections 10000
STAT curr_connections 5
STAT total_connections 1266204467
STAT rejected_connections 0
STAT connection_structures 57
STAT reserved_fds 20
STAT cmd_get 981415439
STAT cmd_set 283181378
STAT cmd_flush 0
STAT cmd_touch 0
STAT cmd_meta 0
STAT get_hits 817040573
STAT get_misses 164374866
STAT get_expired 0
STAT get_flushed 0
STAT delete_misses 335339640
STAT delete_hits 1146060
=====省略=====
END
ヒット率を出すためには、
STAT get_hits 817040573
STAT cmd_get 981415439
という値から get_hits / cmd_get * 100 を計算します。
このMemcachedサーバーの場合は 83.25% のヒット率になります。
比較的簡単ですが、ひと手間かかります。
外部の管理ツールで確認する
ヒット率を確認したいけど毎回サーバー環境での操作は面倒ですし、サーバー環境へのアクセス権が無い場合もありますね。そんな時は、WEBブラウザから確認できるphpMemcachedAdminが便利です。
事前に php と php-memcached をインストールしておいてください。
こちら からphpMemcachedAdminをダウンロードして、WEBサーバーの公開ディレクトリで解凍します。
以下のファイルのポートとホスト名をご利用の環境に合わせて修正します。
vi phpMemcachedAdmin/Config/Memcache.php
array (
'127.0.0.1:11211' =>
array (
'hostname' => '127.0.0.1',
'port' => '11211',
),
),
修正したら https://yourdomain/phpMemcachedAdmin にアクセスするだけです!
ヒット率は 83.3% と出ています。[stats]コマンドで確認したヒット率と同じです。
ブラウザから確認できると管理もしやすくなりますね!
Memcached、Redisでお困りの際はご相談下さい
キャッシュの利用は昨今のwebアプリケーションの高速化には必須となりました。
弊社では、MemcachedやRedisの開発/運用事例も多くございます。
オンプレミスでのクラスタリングなどスケール構造での運用から、awsなどクラウドベンダーのマネージドサービスとしてのMemcached、Redisにも対応可能です。