地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

memcachedのメモ

memcached

今更memcachedのメモ

github.com

お試し用の環境として以下を用意しました。全てコンテナだけで済ませる予定です。

GitHub - ryuichi1208/memcached-test

telnetから使う

接続

$ telnet [ip or host] port

set/get/delete

# set
> set mykey 0 60 7
> myvalue
STORED

# get
> get mykey
VALUE mykey 0 7
myvalue
END

# delete
> delete mykey

# 状態取得
stats
stats items
stats cachedump
stats slabs

statsの表示項目についての概要。

項目 概要
pid プロセスID
uptime memcachedの起動時間(秒)
time 現在時刻のタイムスタンプ
version memcacheのバージョン
curr_items 現在のデータ数
total_items 累計のデータ数
bytes 現在の使用メモリ
curr_connections 現在のコネクション数
total_connections memcacheの起動からの累計コネクション数
connection_structures memcacheが確保したコネクション構造体数
cmd_get GETコマンド発行の累計
cmd_set SETコマンド発行の累計
get_hits リクエストでキーが見つかった数
get_misses リクエストでキーが見つからなかった数
evictions 容量(メモリ)不足でmemcacheから追い出した回数
bytes_read ネットワークから受信したバイト数
bytes_written ネットワークへ送信したバイト数
limit_maxbytes memcacheの最大容量
threads リクエスト当たりに動作するスレッド数

データ置換

replace key1 0 0 6

全削除

> flush_all

memcahced-toolを使ってみる

memcached/memcached-tool at master · memcached/memcached · GitHub

ツール自体はmemcachedリポジトリ配下に置いてあるのでそのまま使える。(perlmemcachedperlで使えるライブラリが必要)

/ # memcached-tool
Usage: memcached-tool <host[:port] | /path/to/socket> [mode]

       memcached-tool 10.0.0.5:11211 display        # shows slabs
       memcached-tool 10.0.0.5:11211                # same.  (default is display)
       memcached-tool 10.0.0.5:11211 stats          # shows general stats
       memcached-tool 10.0.0.5:11211 settings       # shows settings stats
       memcached-tool 10.0.0.5:11211 sizes          # shows sizes stats
       memcached-tool 10.0.0.5:11211 dump [limit]   # dumps keys and values

概要は以下の通り。

command 概要
display スラブの一覧と使用状況の表示
dump データのダンプ
stats memcachedの統計データの表示

多分一番使うのがdumpになりますかね。こちらについての概要

実行結果

add test::key::3::44 0 1596979025 198
my;kO.R1&#(l'#cg1{bmRk@st(=eR['dQ*|;OP!`:HDV\k9|!g[WaRn~~=:MFddRVUzq@1DO@Fgr:Cek8kA*m"S^ks#C6iD223dwz25M>|inx|F'&k-[`wH`(T1}/w=$8mp?_^4!#Xy_\rg5yR)iXxXhJ!puTI'U>0vT\j!B"K6Js(X,$qpur[n]qx/>`hkiyt(jgm
add test::key::14::44 0 1596979014 216
Pl`&!KOub_o<".A,RQgrXj_cHXUm\H$]7l.q*Rt?iH9\!c"t6"/B]hP9/|,Gw@Afi|mtm4A"LG;}!i2:lE<MPbo??U{p5x?jX"'{}'s%h_pH}%8T!aY:ca\UriI0haoA5dml:1"^NSE?AAE,1je`KswhFmTa';j]_Lm`4*0=ZB/&hzIb#W'\s9qaYcRvy^V\XL#JlrP3zbj&[7,q0IN}JQ4W
add test::key::7::46 0 1596979021 140
1EUy.4B.uNM]n[vagDCE8<gYA$zmV>yU|J(E0~)|uID[D3`EZ#r}<mN;^/_HBHmQ7yzhm".YQ('3"K{P9n(;Y_A0_*_LhYh(HO-9FLxX!?~}`n*e}'[vL#$@E)X_B<K}]?}&l9j@SF)6
add test::key::7::44 0 1596979021 77
:'x}C-)]pU2gOES*/Py<~";>7z03@T]I}='Xgp(_uthxhdj2<~\=sf])3\#b00fn$PX(JJ]td@Z4e
add test::key::5::46 0 1596979023 11
=LnMG42l\A9
add test::key::5::44 0 1596979023 49
F$o"E&`ALb]8Kcv<0;SI{[f>>1XNt9olS5+f;xhRN_^Cd&)1N

add ~ ごとに1項目ずつ表示されている。

項目 概要
slab total num データが保存されているスラブの数
chunk total num データが保存されているチャンクの数
slab num スラブ番号
chunk num チャンクの数
key キー値
flags データ保存時の指定フラグ
exptime データの有効期限(unix time)
bytes データのバイト数
data block データ

expireがunix timeなので変換が必要なのを除けば直感的に分かりやすい値で出してくれるので便利。

キー一覧の取得

qiita.com

上記を参考に今回使ってる環境用に修正してみました。

#!/bin/bash -eu

IFS=$'\n'

for host in ${hosts[@]}; do
  for port in ${ports[@]}; do
    keys=()   
    echo "host:${host}:${port}"
    set +e
    items=$((echo 'stats items'; sleep 0.5s;) | telnet ${host} ${port} 2>/dev/null | egrep 'items:[0-9]+:number [0-9]+')
    set -e
    for item in ${items[@]}; do
      items=$(echo $item | perl -pe 's/^STAT items:([0-9]+):.+$/$1/')
      number=$(echo $item | perl -pe 's/^.+ ([0-9]+)$/$1/')
      keys+=($((echo "stats cachedump $items $number"; sleep 0.5s;) | telnet localhost ${port} 2>/dev/null | egrep -v 'END|^Escape.+|^Trying.+|^Connected.+'))
    done

    for key in "${keys[@]+"${keys[@]}"}"; do
      echo $key | perl -pe 's/^ITEM (.+)?/$1/'
    done
  done
done