Amazon ElastiCache (インメモリキャッシュ管理・操作サービス) | AWS はAWSの提供する memcached 。マネジメントコンソールからポチポチしてるだけで適当に動き出す、設定条件とかあんまり意識しなくても良い。使う EC2側のセキュリティグループの設定とかあるけど。
で、細かい設定を調整しようとしたときに、どうしたら良いか探してマネジメントコンソールをさまよう事になる。(これは僕がある程度マネジメントコンソールが非力じゃなくなってからの AWSユーザだからで、それ以前からやってるような強者はコマンドライン見に行ったり API叩きに行くのかもしれない)。
max_item_size のデフォルトは 1048576 bytes (概ね 1M)。これを増やしたかった。それには Cache Parameter Groups を経由して調整することになる、デフォルトで適用されるグループ「default.memcached1.4」では値をいじれないの注意。新しく作って値を調整、その後そのパラメータグループでキャッシュクラスターを作る。或いはキャッシュクラスターの一覧から Modify のリンクを辿るとパラメータグループの割付も変更できる。max_item_size の場合、その後 Reboot が必要になるんでその辺も。(勿論キャッシュはクリアされる)
キーとか値とか
そんな ElastiCache で、実際に格納されているキーと値を見たかったり。まあなんかクライアント使うか、telnet で見に行けば良いんだけど。
#!/usr/local/bin/ruby
require 'net/telnet'
sess_save = `php -r "echo ini_get('session.save_path');"`
OptsECache = {
'Host' => sess_save,
'Port' => 11211,
'Telnetmode' => false,
'Prompt' => /^END\n/,
}
ecache = Net::Telnet.new OptsECache
begin
if ARGV.size <= 0 then
ecache.cmd('stats items') \
.each_line.select{|l| /number/ =~ l} \
.map{|l| /items:(\d+):number (\d+)/.match(l).values_at(1, 2)} \
.map do |slab_no, limit|
ecache.cmd("stats cachedump #{slab_no} #{limit}") \
.each_line.reject{|l| /END/ =~ l}
end.flatten.join.display
else
ARGV.map{ |key| ecache.cmd "get #{key}" }.join.display
end
ensure
ecache.close
end
そもそも PHP のセッション情報を memcachedストアにしたかったので ElastiCache を使おうとしてるので、PHP自身に ElastiCacheサービスの場所(ノードのエンドポイントの URL)を訊きに行く。引数無しだとキー情報の一覧、引数にキーを渡すと値を返す。