概要: Orca という Cache::Memcached::Fast と部分的に互換のあるモジュール作った
こんにちま! いつも心に Cookbook、悪い意味でドキュメントが恋人、 にゃるらこと岡村直樹(そのうち 23 歳)です。みなさんのたうちまわりながらコーディングしてますか?
まあまたかって感じのユヤタンパロディはいつものこととして、 今日は昨日あたりに github に上げたOrca
というモジュールを紹介したいと思います。
Orca
とは何か?
Orca
とは何かっていうと、いろんな KVS とか RDBMS とかのデータを、 Cache::Memcached::Fast
ライクな API で操作するための、 インターフェースアダプターモジュールです。
と、言ってもわかりづらいんで、一言でいうと、
いろんなデータストアの操作 Cache::Memcached::Fast 互換な API で操作してしまおう!
という感じのモジュールです。
まあ実際のところ、Orca
には元になったモジュールがあって、 それは僕は作りかけで放置したApplish
という Web Application framework の出来損ないの中で実装した、 Applish::Cache
というモジュールが元です。
Applish::Cache
という名前から推察できるに、元はCache::Memcached::Fast
とある程度の互換がある Cache interface module だったのですが、Cache interfad module には CHI を筆頭に、 それなりにいろいろそろってたりするので、今更作っても dis られること間違いなしというか、 それ誰得? 今更だよね? というか既存モジュール使えよハゲ、等々、がさっと思い浮かんだので、 とりあえずいろんな KVS をCache::Memcached::Fast
互換な API で使える Wrapper module という事にしました。 ごまかしてますね。はい。
あと、Applish::Cache
な頃はMoose
or Mouse
に依存してましたが、 Orca
ではできるだけ依存を簡単にするため、大抵の環境にはいっているか、 もしくはインストールが容易なモジュールのみに依存してます。 まあこのあたりOrca
のMakefile.PL
を見てみてください。
Orca
の特徴
Orca
の特徴といえば、なんと言ってもCache::Memcached::Fast
の部分的に互換のある API です。
Orca
の POD には書いてありますが、なんで 部分的な互換 と言ってるのかというと、 それはCache::Memcached::Fast
のサーバ接続関連の API は実装してないからです。 あと、データの出し入れのメソッドの内部的な仕様がよくわからなくてこれでいいの? という実装も含まれてるので、そのあたりも 部分的な互換 、となってる理由です。
まあそうは言っても、データの出し入れに関しては多分互換性があると思うので、 Cache::Memcached::Fast
の代わりにOrca
を使う、といったことも可能です。
まあここでmemcached
の CAS とかどうなってんの? と思われると思うのですが、 もちろん CAS も使えます! ……なんちゃって CAS ですけど>< というか、ネットで調べた CAS の仕組みをとりあえず実装した、って感じなので、 本当に CAS と互換があるのかどうかはちょっと怪しいです。
あと今のところOrca
の Engine というか Backend は、Cache::LRU
を使ったメモリベースのOrca::Engine::Memory
と とりあえずモジュールだけがあって、テストも何もないOrca::Engine::Memcached
の二つのみですが、 まあ今後テストやらドキュメントなんかを足していけたらなーと思ってます。
Orca
の使い方
で、能書きはいいんでOrca
の使い方をちょろっと紹介すると、
use Orca;
my $orca = Orca->new('Memory');
$orca->set( $key, $value, $expire );
my $value = $orca->get($key)
という感じです。というかさっきも書きましたが、Orca
は基本的にCache::Memcached::Fast
の API を参考に作られてるんで、 Cache::Memcached::Fast
を使うような感じでOrca
を使うことができます。
で、Orca
のエンジンを書きたい! という場合、Orca::Engine
の POD にも書いてありますが、 基本的には、Orca::Engine
を継承して、
new
namespace
set
cas
get
gets
delete
flush_all
の八つのメソッドを実装すれば、必要な機能がそろう、という感じになってます。
Orca
の今後
Orca
に関しては、需要があるのかどうかサッパリ分からないのと、 既存モジュールと激しくダブってるような気がするんで、今のところ CPAN に upload する予定はありません。
というかまだ作ったばっかりで自分ですら使ってないので、 もうちょっと使い込んでから様子をみたいと思ってます。
というわけで今日はOrca
っていうモジュールを作ったよ! って話でした。 まあ何か連絡あったら Twitter: @nyarla までお願いします。
#FIXME