読者です 読者をやめる 読者になる 読者になる

memcached-client を改悪してみた

git の使い方が全くわからず。一瞬 bitbucket に入れようかと思ったくらい。

voluntas's memcached-client at master - GitHub http://github.com/voluntas/memcached-client

とりあえず application 化しました。これで lib の下に置けばさくっと動きます。想定した使い方とは違うのかもしれないので微妙ですが。。。

大本との変更点は以下の通りです。

make して erl -pa ebin で使えるようになってると思います。テストとかは書いてないのでそのうち書きます ... 。

  • application:start(memcached) を呼び出して実行するようにした
  • random_id を廃止して Pid を返すようにした
  • Name (atom) を渡して好きに名前を付けられるようにした
    • 名前を渡さない場合は Pid を返してくる
  • supervisor 化においたので、監視対象
% erl -pa ebin
Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
1> application:start(memcached).
ok
2> {ok, Conn1} = memcached:connect("127.0.0.1", 11211).
{ok,<0.39.0>}
3> {ok, Conn2} = memcached:connect("127.0.0.1", 11211).
{ok,<0.43.0>}
4> {ok, Conn3} = memcached:connect("127.0.0.1", 11211).
{ok,<0.45.0>}
5> ok = memcached:set(Conn1, "Hello", "World").
ok
6> ok = memcached:set(Conn1, "Say", "Goodbye").
ok
7> memcached:get_multi(Conn3, ["Hello", "Say"]).
{ok,[{"Hello","World"},{"Say","Goodbye"}]}
% erl -pa ebin
Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
1> application:start(memcached).
ok
2> {ok, _} = memcached:connect(sample1, "127.0.0.1", 11211).
{ok,<0.39.0>}
3> memcached:set(sample1, "key", "value").
ok
4> memcached:get(sample1, "key").
{ok,"value"}

追記

application 化するメリットについてちょっと書いておこうと思う。

結局 Erlang ではライブラリはアプリケーション化されたものという認識になってしまう。この辺は systools とか reltool を使うとよく実感出来る。

なので lib/spam-1.0.0 のように配布できる形が望ましい。他の人のアプリケーションに影響を及ぼさない形で使うにはこれが一番スマート。

良く気にされるのは application:start(spam) をどう組み込むかだけれど実はこれも余り意識しなくていい。SASL を使って spam.app の applications に [spam] と指定すれば自動で sasl のツリー下で管理される。

もちろんこれは OTP に何もかもをゆだねるといった前提での話。

個人的にアプリケーション化する理由はライブラリが他のアプリケーションの Makefile やそれ以外に影響を及ぼすのが嫌だからである。

これが嫌な人もいて Facebook なんかはこの辺のリリース関連は使っていないとプレゼン資料に書いてあった。