カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
Ruby Inside より 3 Fresh Presentations from RailsConf 2007
アメリカはオレゴン州ポートランドで RailsConf 2007 が行われていました。Ruby Inside でその RailsConf 2007 のプレゼンを 3 つ紹介していますので、右から左に流します。
Scaling a Rails Application from the Bottom Up は、最近 Joyent Slingshot を公開した Joyent の CTO のプレゼン。スケーリングといっても「Rails とデータベース……」という話ではなく、Joyent での例を元にして、コストとパフォーマンスを考えたサーバの物理構成やネットワーク構成を 実際の製品名を挙げつつ紹介しています。その後 L7、DNS、Memcached……と段々とアプリレベルまで降りてきて説明。参考になります。
Angels & Daemons は、Ruby でのデーモンプロセスの作り方。LDAP から ActiveRecord (とその裏のデータベース)へのゲートウェイという実例から説明しています。Rails の実行環境を引き継いだデーモンの作り方というのははじめて見たかも。
Harnessing Capistrano は、Capistrano のチュートリアルです。Capistrano がどういうことに使えるのか、インストール方法、タスクの書き方、Capistrano 2.0 の紹介などなど。まとまった Capistrano の資料では一番詳しいかも知れません。
memcache-client はいわずと知れた memcached の Ruby 版クライアントライブラリです。Ruby から memcached にデータを格納/取り出しができます。
FeedTools::Cache::Memcached を作るにあたって memcache-client の使い方を調べましたのでメモします。あまり突っ込んだことは書きません。ただの備忘録です(書くと憶える)。
# emerge memcached
libevent-1.3a と memcached-1.2.1 でした。1.2.2 はりリースされたばかりですしね。ちなみに USE=perl していると Cache::Memcached もインストールされます。後は設定ファイルを修正して起動です。
# vi /etc/conf.d/memcached # LISTENON を設定 # /etc/init.d/memcached start
# gem install memcache-client
gem でインストールします。gem は楽で良いですね。ところで、gem ってインストールした数が増えるほど require_gem に時間がかかるようになる気がしますが気のせいですかね……
一番単純な利用法は、接続先のホストとポートを指定して MemCache.new することです。あとはハッシュのように値の設定/取得できます。
require 'rubygems'
require 'memcache'
cache = MemCache.new('localhost:11211')
cache['number'] = 1234
cache['string'] = 'foo'
cache['array'] = [1, 2, 3]
cache['hash'] = { 1 => 'foo', 2 => 'bar' }
p cache['number'] #=> 1234
p cache['string'] #=> "foo"
p cache['array'] #=> [1, 2, 3]
p cache['hash'] #=> {1=>"foo", 2=>"bar"}
内部で格納するオブジェクトを Marshal していますので、Marshal できる任意のオブジェクトを格納できます。ですので、
require 'rubygems'
require 'memcache'
cache = MemCache.new('localhost:11211')
cache['file'] = File.open('/etc/hosts') #=> TypeError: can't dump File
のように IO とそのサブクラスなどはキャッシュできません。また、Ruby 以外の言語とキャッシュデータを共有するのも難しいと思います。
memcached にデータがあることを確かめるため、値の取得だけを試してみます。
require 'rubygems'
require 'memcache'
cache = MemCache.new('localhost:11211')
p cache['number'] #=> 1234
Ruby のプロセスは別ですが、データをちゃんと取り出せました。
キーは事実上 String しか利用できません。String#length を使ったり、String#crc32_ITU_T を定義しているためです。多少いじれば Symbol を使うようにすることもできるでしょう。
require 'rubygems'
require 'memcache'
cache = MemCache.new('localhost:11211')
cache[ [1, 2, 3] ] = 'foo'
p cache[ [1, 2, 3] ] #=> "foo"
と Array を受け付けちゃったりしますが、ハッシュ値を計算しているロジックが String 前提のようなので、Array を使うと衝突しそうです。String だけ使いましょう。
memcached はデーモンを複数並べて大きなメモリ壁にして使ったり、namespace を設定することで複数のアプリから利用したりと、使い出があるソフトですがとりあえず memcache-client の基本的な使い方としてはこれまで。
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).