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 # coding: utf-8 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 # ensure 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 # if ARGV.size <= 0 ARGV.map{ |key| ecache.cmd "get #{key}" }.join.display end # if ARGV.size <= 0 ensure ecache.close end # ensure
そもそも PHP のセッション情報を memcachedストアにしたかったので ElastiCache を使おうとしてるので、PHP自身に ElastiCacheサービスの場所(ノードのエンドポイントの URL)を訊きに行く。引数無しだとキー情報の一覧、引数にキーを渡すと値を返す。