Memcached-introduction

【Memcached導入に関するメモ】2012/07/11(水)~


■memcached導入

memcached導入方法
1
$ sudo aptitude install memcached

memcachedインストール時にlibevent-1.4-2(非同期イベント通知ライブラリ)もインストールされる模様

memcached起動方法
1
$ memcached -u memcached -d
memcachedの主なオプション

・-m <キャッシュメモリ容量> デフォルトは64(単位はMB)

・-l <待ち受けネットワークインタフェース> デフォルトはINDRR_ANY

・-p ポート番号、規定値は11211

・-u <デーモン実行ユーザ> rootでデーモンを起動する際にデーモン実行ユーザを指定する

例) キャッシュ = 1GB、接続許可ホスト = ローカルホスト

1
$ memcached -u memcached -d -m 1024 -l 127.0.0.1

memcachedデーモンの起動を確認 $ ps aux | grep “memcached”

1
2
nobody 14955  0.0  0.3  62700  1224 ?     Sl 10:28 0:00 /usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1
1000   15156  0.0  0.2   7112   836 pts/0 D+ 10:50 0:00 grep memcached
memcached動作確認

まずtelnetにてmemcachedへ接続

1
$ telnet localhost 11211

memcachedへ接続後、statsコマンド他で動作確認を行う 動作確認後、quitコマンドで接続を切断する

その他:memcachedのバージョンとヘルプを表示

1
$ memcached -h
値の格納と取得

setコマンドとgetコマンドにて値の格納と取得を行う まずsetコマンドは以下のフォーマットで指定する

<コマンド> <キー> <圧縮フラグ(1 or 0)> <有効期間(単位:秒)> <サイズ(単位:Bytes)>

例) 「foo」というキーに「123」という3バイトのデータを非圧縮(0)/無期限(0)で格納する。またそれを取り出す。

1
2
3
4
5
6
7
8
9
10
11
12
set foo 0 0 3
123

=> STORED

get foo

=> VALUE foo 0 3
=> 123
=> END

quit
その他の操作

stats items :キャシュされているレコード情報を取得
stats cachedump :キャッシュ内容ダンプ

例)

1
2
3
4
5
6
7
8
9
10
11
12
$ telnet localhost 11211
stats items
STAT items:1:number 6
STAT items:1:age 20505
STAT items:1:evicted 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0

 stats cachedump 1 100
ITEM foo [9 b; 1264464651 s]
ITEM bar [9 b; 1264464649 s]
memcached終了方法
1
$ sudo killall memcached

■dalli(memcachedクライアント)導入

dalli導入方法

Gemfileに「gem ‘dalli’」と一行追加し、bundle installを行う

■キャッシュストアに設定する方法

例としてproduction環境で使用する場合は、config/environments/production.rb に次の行を追加する

1
config.cache_store = :dalli_store

■セッションストアに設定する方法

config/initializers/session_store.rb に以下の行を追加

例)以下はセッション情報を二週間保持する例
注)Rails3のデフォルト設定では、ブラウザからのアクセスが切断された時点でセッションも破棄される

1
2
3
require 'action_dispatch/middleware/session/dalli_store'
Railsアプリ名::Application.config.session_store :dalli_store
Railsアプリ名::Application.config.session_options = {:cookie_only => false, :expire_after => 2.weeks}

■Railsコンソール上でのキャッシュ内容確認

キャッシュ設定内容確認

例)

1
2
> Rails.cache
 => #<ActiveSupport::Cache::DalliStore:0x00000001e4cf68 @options={:compress=>nil}, @raise_errors=false, @data=#<Dalli::Client:0x00000001e4ce28 @servers=["localhost:11211"], @options={:compress=>nil}, @ring=nil>>
Railsコンソール上でのsession_optionsの確認

例)

1
2
> Railsアプリ名::Application.config.session_options
 => { :cookie_only=>false , :memcache_server => [ 'localhost:11211']}
値の格納と取得

例)

1
2
3
4
5
6
> Rails.cache.write("test", {:message => 'Hello', :time => Time.now})
 => true
> Rails.cache.read("test")
 => {:message=>"Hello", :time=>2010-09-15 13:26:09 +0900}
> Rails.cache.clear
 => [true]

以上


参考サイト:
memcached導入手順
memcachedコマンド一覧
memcachedでキー一覧を取得したい時に
memcachedでパフォーマンス向上
Rails3からmemcachedを利用する
memcachedプロトコルCAS操作について
HerokuでMemcacheを使うには

Ruby on Rails 3.1 でセッションを memcached に保存する
Rails 3.2 で Dalli を Session Store として利用する際の session_options の罠
Rails3.x系でログイン状態を保持する方法
rails 3でmemcachedを利用する
Rails3系でセッション有効期限の設定
railsのクッキーとセッションについてまとめ

その他:
各種サーバ構成の速度ベンチマーク