Node.js
RedisとNodeJS
サーチ…
備考
node_redisで基本的で最も一般的に使用される操作について説明しました。このモジュールを使用すると、Redisのフルパワーを活用し、非常に洗練されたNode.jsアプリケーションを作成できます。強力なキャッシングレイヤー、パワフルなPub / Subメッセージングシステムなど、多くの興味深いものをこのライブラリで構築できます。ライブラリの詳細については、 ドキュメントを参照してください。
入門
Node_redisは、 Node.jsのRedisクライアントです 。次のコマンドを使用してnpm経由でインストールできます。
npm install redis
node_redisモジュールをインストールしたら、すぐに行けます。簡単なファイルapp.jsを作成して、Node.jsからRedisに接続する方法を見てみましょう
app.js
var redis = require('redis');
client = redis.createClient(); //creates a new client
デフォルトでは、redis.createClient()はホスト名とポートとしてそれぞれ127.0.0.1と6379を使用します。別のホスト/ポートを使用している場合は、次のように指定できます。
var client = redis.createClient(port, host);
今度は、接続が確立されたら、何らかのアクションを実行できます。基本的には、以下のように接続イベントを待機するだけです。
client.on('connect', function() {
console.log('connected');
});
したがって、次のスニペットがapp.jsに入ります:
var redis = require('redis');
var client = redis.createClient();
client.on('connect', function() {
console.log('connected');
});
さて、アプリケーションを実行するには、端末にnode appと入力してください。このスニペットを実行する前に、Redisサーバーが稼動していることを確認してください。
キーと値のペアの格納
Node.jsからRedisに接続する方法を知ったので、キーと値のペアをRedisストレージに保存する方法を見てみましょう。
ストリングの保存
すべてのRedisコマンドは、クライアントオブジェクト上で異なる機能として公開されています。単純な文字列を格納するには、次の構文を使用します。
client.set('framework', 'AngularJS');
または
client.set(['framework', 'AngularJS']);
上記のスニペットには、キーフレームワークに対して単純な文字列AngularJSが格納されています。両方のスニペットが同じことを行うことに注意してください。唯一の違いは、最初のものが可変数の引数を渡し、後でargs配列をclient.set()
関数に渡すことです。操作が完了したら、オプションのコールバックを渡して通知を受け取ることもできます。
client.set('framework', 'AngularJS', function(err, reply) {
console.log(reply);
});
なんらかの理由で操作が失敗した場合、コールバックへのerr
引数はエラーを表します。キーの値を取得するには、次の操作を行います。
client.get('framework', function(err, reply) {
console.log(reply);
});
client.get()
は、Redisに格納されているキーを取得します。キーの値は、コールバック引数の返信を介してアクセスできます。キーが存在しない場合、replyの値は空になります。
ハッシュを格納する
多くの場合、単純な値を格納しても問題は解決しません。 Redisにハッシュ(オブジェクト)を格納する必要があります。そのために、以下のようにhmset()
関数を使用することができます:
client.hmset('frameworks', 'javascript', 'AngularJS', 'css', 'Bootstrap', 'node', 'Express');
client.hgetall('frameworks', function(err, object) {
console.log(object);
});
上記のスニペットは、各技術をそのフレームワークにマップするRedisにハッシュを格納します。 hmset()
の最初の引数はキーの名前です。後続の引数は、キーと値のペアを表します。同様に、 hgetall()
を使用してキーの値を取得します。キーが見つかった場合、コールバックの2番目の引数にはオブジェクトである値が格納されます。
Redisはネストされたオブジェクトをサポートしていないことに注意してください。オブジェクトのすべてのプロパティ値は、格納する前に強制的に文字列に変換されます。 Redisにオブジェクトを格納するには、次の構文を使用することもできます。
client.hmset('frameworks', {
'javascript': 'AngularJS',
'css': 'Bootstrap',
'node': 'Express'
});
オプションのコールバックを渡して、操作がいつ完了するかを知ることもできます。
すべての関数(コマンド)は、同等の大文字/小文字で呼び出すことができます。たとえば、 client.hmset()
とclient.HMSET()
は同じです。リストの格納
アイテムのリストを保存する場合は、Redisリストを使用できます。リストを格納するには、次の構文を使用します。
client.rpush(['frameworks', 'angularjs', 'backbone'], function(err, reply) {
console.log(reply); //prints 2
});
上記のスニペットは、frameworksというリストを作成し、それに2つの要素をプッシュします。したがって、リストの長さは2になりました。ご覧のとおり、 args
配列をrpush
。配列の最初の項目はキーの名前を表し、残りはリストの要素を表します。また、 lpush()
代わりにrpush()
を使用して要素を左にプッシュすることもできます。
リストの要素を取得するには、 lrange()
関数を次のように使用します。
client.lrange('frameworks', 0, -1, function(err, reply) {
console.log(reply); // ['angularjs', 'backbone']
});
lrange()
3番目の引数として-1を渡して、リストのすべての要素を取得することに注意してください。リストのサブセットが必要な場合は、ここで終了インデックスを渡す必要があります。
セットを格納する
セットはリストと似ていますが、重複を許さない点が異なります。したがって、リスト内に重複する要素がないようにするには、セットを使用できます。以前のスニペットをリストの代わりにセットを使用するように変更する方法は次のとおりです。
client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
console.log(reply); // 3
});
ご覧のように、 sadd()
関数は指定された要素で新しいセットを作成します。ここで、集合の長さは3である。セットのメンバーを取得するには、次のようにsmembers()
関数を使用します。
client.smembers('tags', function(err, reply) {
console.log(reply);
});
このスニペットは、セットのすべてのメンバーを取得します。メンバーを取得するときには順序が保持されないことに注意してください。
これは、すべてのRedis搭載アプリで見つかった最も重要なデータ構造のリストでした。文字列、リスト、セット、ハッシュとは別に、ソートされたセット、hyperLogLogなどをRedisに格納することができます。コマンドとデータ構造の完全なリストについては、公式のRedisのドキュメントをご覧ください。ほとんどすべてのRedisコマンドは、node_redisモジュールによって提供されるクライアントオブジェクトに公開されています。
node_redisによってサポートされるいくつかのより重要な操作。
キーの有無の確認
場合によっては、キーがすでに存在するかどうかを確認し、それに応じて処理を行う必要があります。これを行うには、次のようにexists()
関数を使用exists()
ます。
client.exists('key', function(err, reply) {
if (reply === 1) {
console.log('exists');
} else {
console.log('doesn\'t exist');
}
});
キーの削除と期限切れ
時には、いくつかのキーをクリアして、それらを再初期化する必要があります。キーを消去するには、次のようにdelコマンドを使用します。
client.del('frameworks', function(err, reply) {
console.log(reply);
});
次のように、既存のキーに有効期限を設定することもできます。
client.set('key1', 'val1');
client.expire('key1', 30);
上記のスニペットは、キーkey1に30秒の有効期限を割り当てます。
インクリメントとデクリメント
Redisは、増分キーと減分キーもサポートしています。キーをインクリメントするには、次のようにincr()
関数を使用します。
client.set('key1', 10, function() {
client.incr('key1', function(err, reply) {
console.log(reply); // 11
});
});
incr()
関数は、キー値を1つずつインクリメントします。インクリメントする必要がある場合は、 incrby()
関数を使用します。同様に、キーをデクリメントするには、 decr()
やdecrby()
などの関数を使用できます。