はじめに
今回からタイプ毎に代表的なNoSQLデータベースを扱っていきます。まず今回は、
なお、
どんなところに使える?
memcachedの特徴は、
具体的な利用シーン
memcachedの具体的な利用シーンとしては、
- RDBMSから取得したデータのキャッシュ
- 消えても大きな影響の無いデータの保存
一般的には
実際に利用してみる
では、
memcached -u nobody -m 16 -p 11211 -d memcached -u nobody -m 16 -p 11212 -d memcached -u nobody -m 16 -p 11213 -d
今回はmemcache-clientというライブラリを使ってRubyからmemcachedを利用するので、
gem install memcache-client
今回はサーバを3台起動しましたが、
class MemcachedController < ApplicationController
require 'memcache'
before_filter :do_init
DEFAULT_EXPIRE = 3600
def set
@cache['key1'] = 123 # 数値
@cache['key2'] = "あいうえお" # 文字列
@cache['key3'] = %w(hoge fuga) # 配列
@cache['key4'] = {:foo => 1, :bar => “a”} # ハッシュ
end
def get
p @cache['key1'] # 123
p @cache['key2'] # "あいうえお"
p @cache['key3'] # ["hoge", "fuga"]
p @cache['key4'] # {:bar=>"a", :foo=>1}
end
def show
@user = @cache["user#{params[:id]}"]
unless @user
@user = User.find(params[:id])
@cache.set("user#{params[:id]}", @user, DEFAULT_EXPIRE)
end
# do something
end
private
def do_init
@cache = MemCache.new(
['localhost:11211', 'localhost:11212', 'localhost:11213'],
:logger => Logger.new(STDOUT)
)
end
end
データを保存すると、
# key2, key3は11211に、key1は11212に、key4は11213に保存されている set key1 to <MemCache::Server: localhost:11212 [1] (CONNECTED)>: 5 set key2 to <MemCache::Server: localhost:11211 [1] (CONNECTED)>: 19 set key3 to <MemCache::Server: localhost:11211 [1] (CONNECTED)>: 16 set key4 to <MemCache::Server: localhost:11213 [1] (CONNECTED)>: 19
Railsではフラグメントキャッシュなどのキャッシュの仕組みが備わっており、
まずキャッシュされているかをmemcachedでチェックし、

どうやって分散しているのか?
memcachedでは、
以前は単純にハッシュ値をサーバ台数で割り、
そのため、
手軽に扱うために
開発時など、
$ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. stats items STAT items:1:number 2 STAT items:1:age 26873 STAT items:1:evicted 0 STAT items:1:evicted_nonzero 0 STAT items:1:evicted_time 0 STAT items:1:outofmemory 0 STAT items:1:tailrepairs 0 STAT items:1:reclaimed 0 END stats cachedump 1 2 ITEM key2 [19 b; 1275144784 s] ITEM key3 [16 b; 1275144784 s] END
そこで、
ruby memdump.rb [host] [port]
データキャッシュ時の注意
データをキャッシュするときはなるべく外側の、
まとめ
memcachedはメモリ上にデータを保持するためサーバを落とすとデータが消えてしまいますが、