インメモリデータストア「Redis」
Redisについて
Redisは、NoSQLデータベースの一種で、文字列・リスト・ハッシュなど様々なデータ構造を扱うことが可能で、それらのデータをメモリ上で高速に読み書きできるインメモリデータストアです。
一方、インメモリデータストアの弱点であるデータの揮発性、各種のコスト高に対しては、データの永続化機能やレプリケーションによる高可用化・負荷分散などでカバーされていて、Webアプリケーションのキャッシュ、セッション管理、メッセージキューなど、幅広い用途で活用されているようです。
開発元はRedis Ltd.で2024年3月にライセンスの変更(Ver7.2まではBSD-3ライセンスなのでOSSでしたが、Ver7.4以降はRSALv2とSSPLv1のデュアルライセンスとなり非OSSに)があったようです。ちなみに、REDISという名称はREmote DIctionary Serverを意味しているとのことです。
導入方法
次のようなOS環境に導入してRedisを体験してみることにします。
・RHEL9系(今回はAlmaLinux 9.4)
なお、全てのコマンドはroot権限で実行しています。
インストール
今回はdnfによるパッケージインストールを行います。
dnf install redis
執筆時点では「redis-6.2.7-1.el9.x86_64」がインストールされました。
サービス設定
インストール後にはサービス起動、自動起動を設定しておきます。
# サービス起動
systemctl start redis
# サービス状態確認
systemctl status redis
# サービス自動起動有効化
systemctl enable redis
また、Redis設定を変更した後にはサービスの再起動が必要です。
# サービス再起動
systemctl restart redis
以上でRedisが使える環境が整いましたのでredis-cliコマンドでRedisサーバーへ接続することで様々なコマンドを実行できるようになりました。
ブラウザからRedisを使う方法
ついでにブラウザからRedisを実行することができる「Redis Commander」を導入してみます。
Node.jsのパッケージ管理「npm」でインストールするため、今回は以下の手順でNode.jsをインストールしました。
# nodejs Ver20のセットアップスクリプトをダウンロードして実行
curl -fsSL https://rpm.nodesource.com/setup_20.x | bash
# nodejsのインストール
dnf install nodejs
執筆時点では「nodejs-2:20.18.0-1nodesource.x86_64」がインストールされました。
ちなみに、当初はセットアップスクリプトを実行せずにdnfでNode.jsをインストールしてみたのですがVer16と古いせいか、後のnpmによるインストールがうまくいきませんでした。
次にnpmでRedis Commanderをインストールします。
npm install --no-optional -g redis-commander
インストールログを見ても成功したかどうかが疑わしかったので、次のコマンドで「redis-commander」の存在を確認しました。
ls -al /usr/bin/redis*
-rwxr-xr-x. 1 root root 1355432 10月 16 2022 /usr/bin/redis-benchmark
lrwxrwxrwx. 1 root root 12 10月 16 2022 /usr/bin/redis-check-aof -> redis-server
lrwxrwxrwx. 1 root root 12 10月 16 2022 /usr/bin/redis-check-rdb -> redis-server
-rwxr-xr-x. 1 root root 959400 10月 16 2022 /usr/bin/redis-cli
lrwxrwxrwx. 1 root root 58 10月 15 15:38 /usr/bin/redis-commander -> ../lib/node_modules/redis-commander/bin/redis-commander.js
lrwxrwxrwx. 1 root root 12 10月 16 2022 /usr/bin/redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 2508664 10月 16 2022 /usr/bin/redis-server
そして、次のようなサービス起動ファイルを作成してサービス起動します。
# サービス起動ファイル作成
vi /etc/systemd/system/rediscommander.service
#----- ここから -----
[Unit]
Description=redis-commander
[Service]
Type=simple
ExecStart=/usr/bin/redis-commander
[Install]
WantedBy=multi-user.target
#----- ここまで -----
# サービス起動と状態確認
systemctl start rediscommander && systemctl status rediscommander
必要に応じてファイアウォール設定を変更します。
firewall-cmd --add-port=8081/tcp --permanent
firewall-cmd --reload
以上で設定は終了です。
ブラウザからhttp://<インストール先IP>:8081/
にアクセスすると以下のような画面が表示されました。
最後に
以上でRedisが使用できる環境が整いました。基本的な使用方法や設定変更については、マニュアルなどを参照していただくとして、最後にRedisのACL機能の概要について触れて、本稿を締めくくりたいと思います。
ACL
Redis 6.0以降にはACL(Access Control List)というアクセス制御を設定する機能が導入されています。ACLによって「ユーザー認証」「コマンドの許可・拒否」「キーへのアクセス制限」を設定することでセキュリティを強化することが可能です。
ACL設定には、ACLコマンドで動的に設定する方法と設定ファイルに記載しておく方法の2通りあります。
ACLコマンド設定 | 設定ファイル |
---|---|
・Redisサービス稼働中でも設定変更が可能なので、一時的なアクセス権限の変更が主な用途 ・サービスの再起動後にはACLコマンドで設定した内容は消えてしまうため、再起動後にも維持するための方法として「ACL SAVE」コマンドが用意されている | ・Redisサービス起動時に自動的に有効化されるため永続的なアクセス制限が主な用途 ・設定変更には再起動が必要となる点には注意が必要 |
ACL設定例 | ACLコマンド例 | 設定ファイル記載例 |
---|---|---|
ユーザー「cvuser」の作成とパスワード「pass123」の設定 | ACL SETUSER cvuser on >pass123 | user cvuser on >pass123 |
特定コマンド「GETとSET」の許可 | ACL SETUSER cvuser on >pass123 +GET +SET | user cvuser on >pass123 +GET +SET |
特定パターン「mykey:で始まるキー」だけのキーアクセスを許可 | ACL SETUSER cvuser on >pass123 ~mykey:* | user cvuser on >pass123 ~mykey:* |
また、Redisには最初から"default"という認証が不要かつ全コマンド実行可能なユーザーが存在するので、ACLを設定するときにはACL SETUSER default off
で無効にしておくことが推奨されます。
次回以降では、Redisの特徴でもあるデータの永続化やレプリケーションについて試していきたいと思います。
技術情報
関連サービス
お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]
お問い合わせ