Memcached から echo と nc コマンドを使って、key値/データサイズの有効情報を取得するスクリプトを書いてみた


Memcached の 設定、デバッグをしていて、nc コマンドをインストールしました。
このncコマンドを使って、 Memcachedで特定キーのキャッシュ有効期限を取得する - Qiita
で、キャッシュの有効期限を取得をしていて、
この手順っぽいものをスクリプト化を作成してみました。


前提

スクリプトは以下の環境で実行しています。

  • OS
    CentOS release 6.9 (Final)

  • Memcached Memcached 1.4.4 1

また、ncコマンドは、CentOS release 6.9 (Final) には、インストールされていませんでした。
yum install nc nmap でインストールする必要があります。


スクリプト

Memcached の 全データの、キー、キャッシュサイズ、有効期限を取得して、
TSV出力します。

  • convert_memcached_cachedump_to_tsv.sh

    #!/bin/bash
    # HOST
    MEMCACHED_HOST="localhost"
    MEMCACHED_PORT="11211"
    
    # Header部の出力
    echo -e "キー値\\tキャッシュサイズ(b)\\tキャッシュ有効期限"
    # stats items の 標準出力結果のnumberを含む行を抽出し、loop
    echo 'stats items' | nc $MEMCACHED_HOST $MEMCACHED_PORT | grep "number" | while read line;
    do
        # cut コマンドでslabid、item数を切り出し
        item=`echo $line | cut -d':' -f2`
        number=`echo $line | cut -d' ' -f3 | sed -e 's/[^0-9]//g'`
    
        # stats cachedump の標準出力結果のITEMを含む行を抽出し、loop
        echo "stats cachedump $item $number" | nc $MEMCACHED_HOST $MEMCACHED_PORT | grep ITEM | while read line_of_cachedump;
        do
            # cut コマンドでキー値、キャッシュサイズ、キャッシュ有効期限を切り出し
            key=`echo $line_of_cachedump | cut -d' ' -f2`
            value_size=`echo $line_of_cachedump | cut -d'[' -f2 | cut -d' ' -f1`
            expire_date=`echo $line_of_cachedump | cut -d';' -f2 | cut -d' ' -f2`
            # 切り出した文字列をtsv形式で出力
            echo -e "$key\\t$value_size\\t`date -d @$expire_date`"
        done
    done
    

  • 出力結果
    以下の出力が得られます。

    key value_size(b)   expire_date
    :1:58a15f365158c9829c926435d1ac5e06 5845    2017年  4月 24日 月曜日 22:12:51 JST
    :1:76449fb3d8089f196eaab0f8658f3200 5845    2017年  4月 23日 日曜日 22:24:33 JST
    :1:1888d392a570a902cf087917060652b1 9992    2017年  4月 24日 月曜日 22:13:54 JST
    :1:3f3ecf6e38dd0d6cf18d74a267c6c125 10825   2017年  4月 24日 月曜日 22:13:49 JST
    :1:e3515fb72b62b5973f7d5ba728182ea1 10788   2017年  4月 23日 日曜日 22:25:30 JST
    :1:d0c49ca6b081d2eed892e440181bd34c 9804    2017年  4月 23日 日曜日 22:25:33 JST
    :1:7b15405602fc6d31c68e4e9b161f1363 10099   2017年  4月 24日 月曜日 22:13:53 JST
    :1:9d6550dd3b0d80cd75a21d51172eca22 9546    2017年  4月 23日 日曜日 22:25:37 JST
    :1:84a0d19b30b21babdca309df0809fb46 9804    2017年  4月 24日 月曜日 22:13:52 JST
    :1:6f87bb19e26cfc7f62893bbef67e0cf2 9835    2017年  4月 23日 日曜日 22:25:38 JST
    

データ件数が多かったりすると、まともなパフォーマンスがでるのかは、
ちょっとわかりません。。

以上です。

コメント