Memcachedでキャッシュのヒット率を確認する

「SAVACAN」担当のMKです。

今回はMemcached利用時のキャッシュヒット率について取り上げたいと思います。
Memcachedはセッションデータ管理やクエリキャッシュ、htmlや画像のキャッシュなどによく使われていますのでご存じの方も多いと思います。

Memcachedを運用している際、キャッシュの利用料やヒット率を確認したい場面も多いです。そんな時に便利な方法をご紹介します。

まずMemcachedにはどのような特徴があるかから見ていきます。

目次

Memcachedの特徴

Memcachedには以下の特徴があります。

  • データをメモリに保存する。
  • メモリを活用するため、シークタイムの遅延がなく非常に高速。
  • メモリ上にデータを保存するため、memcachedやサーバー本体の再起動によりデータが全て消える。
  • データ保存容量が設定値を超えるとLeast Recently Used(LRU)により古いキャッシュから順に消去されます。

Memcachedと同じインメモリのKVS(key-valueストア)にRedisというものもありますので少し比較してみたいと思います。

key-valueストアとは
データをキーとバリュー(値)のペアで格納するNoSQLデータベースです。

MemcachedとRedisの比較

スクロールできます
MemcachedRedis
処理性能シンプルで高速十分高速だが、
多機能が故わずかなオーバーヘッドあり
対応するデータ型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を一括で管理することもできます。

Memcached、Redisでお困りの際はご相談下さい

キャッシュの利用は昨今のwebアプリケーションの高速化には必須となりました。

弊社では、MemcachedやRedisの開発/運用事例も多くございます。
オンプレミスでのクラスタリングなどスケール構造での運用から、awsなどクラウドベンダーのマネージドサービスとしてのMemcached、Redisにも対応可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次