memcached
今更memcachedのメモ
お試し用の環境として以下を用意しました。全てコンテナだけで済ませる予定です。
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のリポジトリ配下に置いてあるのでそのまま使える。(perlとmemcachedをperlで使えるライブラリが必要)
/ # 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なので変換が必要なのを除けば直感的に分かりやすい値で出してくれるので便利。
キー一覧の取得
上記を参考に今回使ってる環境用に修正してみました。
#!/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