Redis Node.jsによる操作

スポンサーリンク

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」を押下します。

Node.jsのダウンロード 01

対象OSかつ対象CPUのダウンロードリンクのURLを調査します。

Node.jsのダウンロード 02

以下のような操作で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]# 
タイトルとURLをコピーしました