Ruby で Memcached を扱えるライブラリを比較してみました。候補としては、3種類あります。すべて gem コマンド一発でインストールすることができます。
Twitter 社で使われている Memcached 用のライブラリで、libmemcached のラッパーで libmemcached 0.32 が含まれています。2011/02/14 時点でのバージョンは 1.0.6 になっています。Memcached に対する主要な操作に対応しています。開発が盛んに行われている印象があります。ソースコードはここ、ドキュメントはここにあります。
Memcached にアクセスするための Ruby のライブラリです。2011/02/14 時点でのバージョンは 1.8.5 になっています。Memcached に対する主要な操作に対応しています。ソースコードはここ、ドキュメントはここにあります。おそらく、このライブラリがもっとも定番に使われると思います。ただし、2010年8月をもって非推奨になっています。かわりに Dalli というライブラリを使いましょう。
Dalli は、memcache-client の後継にあたる高速な Ruby の Memcached ライブラリです。Dalli は、Memcached バージョン 1.4 以降のみサポートしています。ほとんどの API は、memcache-client と互換性があります。Dalli は、Membase の支援を受けて開発されているようです。2011/02/14時点でのバージョンは 1.0.2 です。
memcache-client と同じようなライブラリです。2011/02/14時点でのバージョンは0.0.1ですが、2004年以降アップデートされていませんので、候補から外しました。
memcache は、memcache-client からフォークしたライブラリです。libmemcached 0.38 が含まれています。ただし、memcache-client とはインターフェースが異なっています。例えば、memcache-client の get_multi にあたるメソッドは get に統一されています。2011/02/14時点でのバージョンは1.2.13です。ソースコードはここ、ドキュメントはここにあります。
ということで、Ruby で memcached にアクセスした場合、memcache-client か Dalli か memcached の選択肢になると思います。memcache-client は、すでに非推奨なので、今から使うには Dalli の方がいいですね。
set と get_multi のベンチマークをとってみました。
memached のベンチマーク結果
user system total real
memcached - set 0.000000 0.000000 0.000000 ( 0.001612)
memcached - get_multi 1 key"5nqil09sWT"
0.000000 0.000000 0.000000 ( 0.000339)
memcached - get_multi 5 keys 0.000000 0.000000 0.000000 ( 0.000133)
memcached - get_multi 10 keys 0.000000 0.000000 0.000000 ( 0.000131)
memcached - get_multi 100 keys 0.000000 0.000000 0.000000 ( 0.000227)
memcache-client のベンチマーク結果
user system total real
memcache-client - set 0.070000 0.020000 0.090000 ( 0.123381)
memcache-client - get_multi 1 key 0.010000 0.000000 0.010000 ( 0.016720)
memcache-client - get_multi 5 keys 0.030000 0.010000 0.040000 ( 0.039433)
memcache-client - get_multi 10 keys 0.000000 0.000000 0.000000 ( 0.005198)
memcache-client - get_multi 100 keys 0.000000 0.000000 0.000000 ( 0.003991)
dalli のベンチマーク結果
user system total real
dalli - set 0.070000 0.020000 0.090000 ( 0.110783)
dalli - get_multi 1 key 0.010000 0.000000 0.010000 ( 0.013051)
dalli - get_multi 5 keys 0.010000 0.010000 0.020000 ( 0.010724)
dalli - get_multi 10 keys 0.010000 0.000000 0.010000 ( 0.012202)
dalli - get_multi 100 keys 0.000000 0.000000 0.000000 ( 0.010550)
memcache のベンチマーク結果
user system total real
memcache - set 0.070000 0.020000 0.090000 ( 0.104050)
memcache - get_multi 1 key 0.010000 0.000000 0.010000 ( 0.012464)
memcache - get_multi 5 keys 0.000000 0.000000 0.000000 ( 0.005252)
memcache - get_multi 10 keys 0.010000 0.000000 0.010000 ( 0.004151)
memcache - get_multi 100 keys 0.000000 0.000000 0.000000 ( 0.003126)
やはり、memcached の方がかなり高速ですが、Dalli や memcache もなかなか高速です。memcached のライブラリでも、ベンチマーク結果が公開されていますので、興味のある人はチェックしてみるといいと思います。
使い方も見たところ、memcache-client や Dalli の方は若干使いやすいような気がしますが、memcached は Twitter で使われていることが考えるとかなり鍛えられていると思います。
現時点での Ruby 用のライブラリは、Dalli か memcached がいいと思います。
# 追記 2/15
@nuna さんに指摘されましたので dalli も追加しました。ありがとうございます!
# さらに追記 2/15
@tmtms さんに指摘されましたので memcache も追加しました。ありがとうございます!
別のエントリで、今回の調査から候補に挙がった、memcached、dalli、memcache、の 3 種類のライブラリを実際に使うために、機能比較を行いたいと思います。
Tags: ruby memcached







