[Nodejs]ioredisを使ってRedisアクセス

スポンサーリンク

Node.jsでredisを利用するにあたり、いいライブラリを探していたところ、ioredisがよさそうだったので実際に使ってみました!

環境

今回実施した環境は以下の通りです。

  • Windows 10 Pro 64bit
  • Node.js 14.16.0
  • ioredis 4.23.0

※RedisはDockerコンテナで動作させます。

スポンサーリンク

実際に動かしてみる

準備

npmでioredisをインストールします。

npm install ioredis

Redisへの接続

ioredisではnewすることで接続できます。
引数にはRedisの接続設定を渡します。

const Redis = require("ioredis");

const config = {
  host: "localhost",
  port: 6379
}

const client = new Redis(config); // 接続

※接続時のオプションはいろいろなものがあります。もっと知りたい方は以下のURLを参考にしてください。
https://github.com/luin/ioredis/blob/master/API.md#new_Redis

Redisの操作

ioredisではコマンド名と同じメソッドが用意されています。

ここでは代表的なものを試してみました。

※値を取得するメソッドは非同期なので、awaitなどの実装をする必要があります。

// set
client.set("testKey", "aaa");

// get
var value = await client.get("testKey") // return "aaa"

// Setを追加
client.sadd("setKey","111");
client.sadd("setKey","222");
client.sadd("setKey","333");

// Setを全取得
var values = await client.smembers("setKey"); // return ["111","222","333"]

Redisからの切断

以下のメソッドを実行すればRedisから切断できます。

client.disconnect();
スポンサーリンク

応用編

ログ出力

接続・切断時やワーニング・エラー時のログを出す場合は以下のようにします。

client.on("connect", () => { // 接続時
     console.log("Redis connected.");
});

client.on("end", () => { // 切断時
     console.log("Redis disconnected.");
});

client.on("warning", (warning) => { // ワーニング
     console.log(warning);
});

client.on("error", (error) => { // エラー
    console.log(error);
});

※上記以外にも補足できるイベントがあります。
参考URL:https://github.com/NodeRedis/node-redis#connection-and-other-events

Pub/Sub

それぞれ、publish, subscribeメソッドが用意されています。

publish

// channel1にpublish
client.publish("channel1", "hello");

subscribe

subscribe時のメッセージ受信時の処理はmessageイベントに関数を登録することで実現します。

// subscribe 複数チャンネルの指定が可能
client.subscribe("channel1", "channel2", (err, count) => {
    if (err) {
        console.error("Subscribeに失敗しました: %s", err.message);
    } else {
        console.log("Subscribeに成功しました.現在${count}チャンネルにsubscribeしています);
    }
};

// 受信時
client.on("message", (channel, message) => {
    console.log(${channel}からメッセージを受信しました:${message});
});

luaスクリプト実行

ioredisではluaスクリプトをコード上に定義し、実行することができます。

// luaスクリプトを定義
const luaScript = `
local key1 = KEYS[1]
local key2 = KEYS[2]

local value1 = ARGV[1]
local value2 = ARGV[2]

redis.call('set', key1, value1)
redis.call('set', key2, value2)
return 1
`;

// luaスクリプトをコマンドとして定義
client.defineCommand("executeLua", {
    numberOfKeys: 2,
    lua: luaScript
});

// 実行
/*
 defineCommandの第一引数がメソッド名になる
 引数はluaのKEYSとARGVに渡される。
 defineCommandのnumberOfKeysで指定したキーの数以降の引数はARGVとして扱われる
*/
var result = await client.executeLua("testKey1", "testKey2", "aaa", "bbb");

redisにスクリプトを登録しなくてもいいので、コード管理も楽ですね(^ ^)

上記ソースにも記載していますが、lua上でredisコマンドを実行する際はredis.callを利用します。

まとめ

今回紹介したioredisは直感的に使いやすいライブラリで、初めてredisを触る人にもオススメです!

使っている人も多いようで、検索するといろいろなナレッジが見つかります。
わからない点があっても解決しやすいのもメリットですね。(ただし、英語が多いですが・・・)

興味のある方はぜひ触ってみてください(^ ^)

2件のコメント

Redisの操作
のコード、一律で「redis.」になってますが、「client.」ではと

// set
redis.set(“testKey”, “aaa”);

ご指摘ありがとうございます!
確かに間違ってますね・・・修正しました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です