nodejsのMemcachedクライアント書いた
今のnpmにもMemcachedのクライアントはあるにはあるけど、再接続に対応してなかったり、そもそも大体コールバックパターンだし、クオリティが不安だったりしたので新しく書いた。 今新しく書くならES6で Promiseだよなーってことで。あと再接続とコマンドキューイング、コネクションプールも付けておいた。
https://github.com/ysugimoto/node-memcached-client
今の開発でMemcached使うケースって結構あると思うんだけど、みんなnodeの場合どうしてるんだろう。bluebirdでアレしてたりするのかな。 Redis使うのが一般的かもしれないけど、Memcachedの方がパフォーマンス出るケースもままあるし…。
大手だと社内で持ってたりしそう(プロトコル簡単だし)で、自分も業務で使いたかったから書いたけど、 せっかくだし公開しました。npm registryにある方がインストールしやすい。
$ npm install node-memcached-client
でインストールできます。
使い方
const Memached = require('node-memcached-client');
const client = new Memcached();
client.on('connect'undefined () => {
client.set('foo'undefined 'bar')
.then(() => client.get('foo'))
.then(value => assert(value === 'bar'));
});
client.connect();
みたいな感じでちょいモダンな感じで使えます。あとクエリをキューに溜めていきつつ通信するので、途中で接続が切れて復帰したときにキューから処理を実行するような感じになってます。 あとはコネクションプールも実装してて、1つのコネクションのキューが増えて詰まってくると別のコネクションを貼って擬似的にスケールするようなプーリングをします。
その他はサロゲートペア対応とかも(当たり前だけど)やったので結構モダンに使えるかなーって思います。とりあえずクライアント用途なのでstore系とget/delete系しか実装してないです。 細かい使い方はGithubを見てください。一通りテストは通してるけど、バグとかあればPRくださいませ。
余談
PHPもそうだけど、memcacheだったりmemcachedだったり、さらにnpmの場合はパッケージ名がカオスすぎるて辛い。
現場からは以上です。