All Articles

ES6でnodejs用のMemcachedクライアント書いた

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', () => {
  client.set('foo', 'bar')
    .then(() => client.get('foo'))
    .then(value => assert(value === 'bar'));
});
client.connect();

みたいな感じでちょいモダンな感じで使えます。あとクエリをキューに溜めていきつつ通信するので、途中で接続が切れて復帰したときにキューから処理を実行するような感じになってます。 あとはコネクションプールも実装してて、1つのコネクションのキューが増えて詰まってくると別のコネクションを貼って擬似的にスケールするようなプーリングをします。

その他はサロゲートペア対応とかも(当たり前だけど)やったので結構モダンに使えるかなーって思います。とりあえずクライアント用途なのでstore系とget/delete系しか実装してないです。 細かい使い方はGithubを見てください。一通りテストは通してるけど、バグとかあればPRくださいませ。

余談

PHPもそうだけど、memcacheだったりmemcachedだったり、さらにnpmの場合はパッケージ名がカオスすぎるて辛い。

現場からは以上です。