フォーチュンサモナーズ
«前の日記(2007-05-21) 最新 次の日記(2007-05-23)» 編集

Don'tStopMusic

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|02|03|04|05|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|08|

カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年

知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。


2007-05-22

_ [Ruby] RailsConf 2007 のプレゼン このエントリーを含むブックマーク

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 の資料では一番詳しいかも知れません。

_ [Ruby][メモ] memcache-client の使い方 このエントリーを含むブックマーク

memcache-client はいわずと知れた memcached の Ruby 版クライアントライブラリです。Ruby から memcached にデータを格納/取り出しができます。

FeedTools::Cache::Memcached を作るにあたって memcache-client の使い方を調べましたのでメモします。あまり突っ込んだことは書きません。ただの備忘録です(書くと憶える)。

memcached インストール (gentoo)

# 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

memcache-client インストール

# 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 の基本的な使い方としてはこれまで。

[]

最近のコメント:

  1. だて (05-30)
  2. eto (05-30)
  3. だて (05-15)

RSS
Creative Commons License
This work is licensed under a Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).