Node.js, .NET, Python, Java, PHPなど殆どのプログラミング言語でRedisを操作するライブラリが存在します。Redis公式サイトの「Redis Client」の説明では、Node.jsでRedisに接続するライブラリとしてnode_redisとioredisの2つを推奨しています。
このページではnode_redisの操作方法を説明します。
前提
公式ドキュメント
参考になる公式ドキュメントを以下に示します。
動作確認済環境
- Rocky Linux 8.6
- Redis 5.0.3
- Node.js 18.12.1
Node.jsによる操作例
Node.jsのインストール
Node.jsでRedisを操作する場合は、比較的最新のNode.jsを必要とします。Redhat系OSでdnf installすると、Node.jsのバージョンが古すぎて操作不能になる事もあります。
それでは最新版のNode.jsをインストールしましょう。「Node.js 公式サイト」をブラウザ開き、「DOWNLOADS」を押下します。
対象OSかつ対象CPUのダウンロードリンクのURLを調査します。
以下のような操作でNode.jsをインストールします。wgetコマンドで指定するURLは時事刻々と変化する可能性がありますので、適宜の変更をお願いします。
wget https://nodejs.org/dist/v18.12.1/node-v18.12.1-linux-x64.tar.xz tar Jxfv node-v18.12.1-linux-x64.tar.xz rm -f node-v18.12.1-linux-x64.tar.xz mv node-v18.12.1-linux-x64 /usr/local/
操作しやすいように、環境変数PATHを変更します。
export PATH=${PATH}:/usr/local/node-v18.12.1-linux-x64/bin/ cat << EOF >> ~/.bashrc export PATH=${PATH}:/usr/local/node-v18.12.1-linux-x64/bin/ EOF
Node.jsがインストールされた事を確認します。
[root@linux010 ~]# which node /usr/local/node-v18.12.1-linux-x64/bin/node [root@linux010 ~]# node -v v18.12.1 [root@linux010 ~]#
node_redisのnpmインストール
npmコマンドでnode_redisをインストールします。操作例は以下の通りです。
mkdir redis-essentials cd redis-essentials npm install redis
念の為、node_redisが正常にインストールされているかを確認します。「require(“redis”)」を実行してエラーがない事を確認しましょう。
[root@linux010 redis-essentials]# node Welcome to Node.js v18.12.1. Type ".help" for more information. > require("redis") { createClient: [Function: createClient], createCluster: [Function: createCluster], commandOptions: [Getter], <omitted> >
操作説明
簡単なSETコマンドとGETゲットコマンドを実行する操作例を示します。
まずは、node_redisモジュールを読み込みます。
redis = require("redis");
Redisへの接続先を指定します。
client = redis.createClient({url: 'redis://127.0.0.1:6379'});
必須ではないですが、以下のような指定をするとエラーが標準出力されるようになります。
client.on('error', (err) => console.log('Redis Client Error', err));
Redis Serverへ接続します。
client.connect();
SETコマンドの操作例です。
client.set("my_key", "Hello World using Node.js and Redis");
GETコマンドの操作例です。
client.get("my_key");
node_redisは、非同期で処理される事に注意ください。以下の出力が示すように、特段の指定をしない場合は非同期処理の結果を返すPromiseオブジェクトが返されます。awaitをつけて実行すれば、コマンドの処理結果が返されます。
> client.get("my_key"); Promise { <pending>, [Symbol(async_id_symbol)]: 108, [Symbol(trigger_async_id_symbol)]: 5 } > await client.get("my_key"); 'Hello World using Node.js and Redis' >
Redis Serverから切断します。
client.quit();
サンプルコード
以上の処理をテキストファイルで表したサンプルコードは以下のようになります。awaitはasyncが指定された関数内でしか使用できません。以下はasyncの無名関数を使った例です。
( async () => { const redis = require("redis"); const client = redis.createClient({url: 'redis://127.0.0.1:6379'}); client.on('error', (err) => console.log('Redis Client Error', err)); client.connect(); client.set("my_key", "Hello World using Node.js and Redis"); var value = await client.get("my_key"); console.log(value); client.quit(); })();
実行例は以下のようになります。
[root@linux010 redis-essentials]# cat << EOF > sample.js > ( async () => { > const redis = require("redis"); > const client = redis.createClient({url: 'redis://127.0.0.1:6379'}); > client.on('error', (err) => console.log('Redis Client Error', err)); > client.connect(); > client.set("my_key", "Hello World using Node.js and Redis"); > var value = await client.get("my_key"); > console.log(value); > client.quit(); > })(); > EOF [root@linux010 redis-essentials]# [root@linux010 redis-essentials]# [root@linux010 redis-essentials]# node sample.js Hello World using Node.js and Redis [root@linux010 redis-essentials]#
補足
非サポート(古い)バージョンのNode.jsで接続を試みた場合
dnfコマンドでインストールできるNode.js version 10.24でRedis5.0.3への接続を試みます。すると、以下のようにrequire(“redis”)すらできない状況に遭遇します。
[root@linux010 redis-essentials]# node -v v10.24.0 [root@linux010 redis-essentials]# node > redis = require("redis"); Thrown: /root/redis-essentials/node_modules/redis/dist/index.js:42 ...options?.modules ^ SyntaxError: Unexpected token . > [root@linux010 redis-essentials]# [root@linux010 redis-essentials]#