Redisは、リアルタイムアプリケーション向けに開発されたスキーマレスなインメモリキーバリューストア(KVS)です。NoSQLデータベース、セカンダリデータレイヤー、または計算集約的なプロセスのキャッシュレイヤーとして使用することができます。

ウェブサイトのセッション状態やその他のデータをキャッシュできる永続ストレージを提供し、Redisをキャッシュレイヤーとして使用するアプリでは、複雑なデータベースクエリまたはAPIの呼び出しを一度行い、その結果をキャッシュします。Redisではオブジェクトを素早く効率的に保存し、取り出すことができるため、より伝統的なリレーショナルデータベースサーバーを主要なコンテンツストアとして使用するWordPressと相性抜群です。

Redisコマンドラインインターフェース(CLI)は、WordPressサイトのRedisサーバーとの通信に便利です。Redis CLI(redis-cliとしてコマンドラインで呼び出される)を使って、Redisサーバーからプログラムで応答を要求・受信したり、Redisインスタンスで実行されたコマンドを監視したり、インスタンスの待ち時間を調べたり、サーバーの状態をリアルタイムで監視したりすることができます。

今回は、RedisとWordPressサイトを統合し、Redis CLIを使ってターミナルから作成、読み取り、更新、削除(CRUD)操作を実行する方法を学びましょう。

DevKinstaでWordPressとRedisを連携する

まずは、WordPressサイトを素早く開発・デプロイできる無料のローカル開発ツール「DevKinsta」を使用し、WordPressサイトとRedisデータベースを接続します。

DevKinstaを使うことで、Nginx、PHP、MySQL互換のMariaDBデータベースを含む、最新の依存関係でDocker化したWordPressサイトをローカル環境にて構築することができます。WordPress CLIにも対応しています。

Windows、Linux、macOSに対応しており、DevKinstaダウンロード時に関連情報を確認可能です。

インストールを終えたら、デフォルトのホスティングスタックを使って、デバイス上にローカルWordPressサイトを作成していきます。

「新規WordPressサイト」「Kinstaからインポート」(MyKinstaからサイトをローカル環境に複製)「カスタムサイト」の3種類から選ぶことができます。

今回は例として1つ目の方法を使って、Nginx、PHP、MariaDB、WordPressの最新バージョンを使用した新規WordPressサイトを作成していきます。

サイトを作成すると、以下のようなダッシュボードが表示されます。

新規WordPressサイトを作成すると表示されるDevKinstaのダッシュボード
新規WordPressサイトを作成すると表示されるDevKinstaのダッシュボード

「パス」は、ローカルサイトのファイルとフォルダを含むディレクトリです。右上に表示される「WP管理画面」をクリックすると、WordPressサイトの管理画面に移動できます。「サイトのホスト」のURLは、先ほど作成した新規サイトに紐付いています。

Docker Desktopを開いて「Containers」をクリックをすると、DevKinstaプロジェクトの依存関係として実行されているすべてのコンテナが表示されます。

Docker DesktopのDevKinstaコンテナ一覧
Docker DesktopのDevKinstaコンテナ一覧

これでWordPressサイトとコンテナの依存関係が稼働し、Redisデータベースをサイトに連携する準備が整いました。続いては、以下の手順に従ってください。

  1. DevKinstaの「WP管理画面」をクリックして、WordPressの管理画面に移動
  2. 左側メニューで「プラグイン」を選択
  3. 新規追加」をクリックして「Redis Object Cache」を検索
WordPress管理画面でRedis Object Cacheプラグインを検索
WordPress管理画面でRedis Object Cacheプラグインを検索

プラグインを見つけたら、「今すぐインストール」をクリックします。その後、左側メニューの「インストール済みプラグイン」を選択し、プラグインが有効になっていることを確認します。

Redis Object Cacheプラグインが有効になっていることを確認
Redis Object Cacheプラグインが有効になっていることを確認

Redis Object Cacheを初めて有効化する際は、Redisデータベースに接続できない旨を伝える通知が表示されます。これは、DockerでRedisインスタンスを持つコンテナを作成することで解決可能です。

ターミナルを開いて、Redisイメージを実行する「redisnet」というネットワークコンテナを作成します。

docker network create -d bridge redisnet

次にネットワークコンテナ内で、Redisイメージをスタンドアロンコンテナとしてビルド、実行します。

docker run -d -p 6379:6379 --name demo_redis --network redisnet redis

コンテナイメージを起動したら、Docker DesktopでRedisイメージが稼働していることを確認します。

Docker Desktopでdemo_redisイメージを実行
Docker Desktopでdemo_redisイメージを実行

WordPressサイトは、Dockerコンテナ内で自動的に起動されます。以下のコマンドで、コンテナのネットワーク名とIDを確認しましょう。

docker network ls
Docker Desktopのネットワーク名とID
Docker Desktopのネットワーク名とID

上のスクリーンショットの例では、devkinsta_networkのネットワークID(切り捨ての適用されたもの)は、d1fa155f7a4dです。このIDは後ほど使用します。

RedisクラスタとサーバーをローカルWordPressサイトに連携する方法の1つとして、RedisとDevKinstaのネットワークを直接接続することができます。まずは、RedisのコンテナIDを確認します。コンテナを一覧表示するDockerコマンドで-lを使って、最近作成したコンテナだけを表示することができます。

docker ps -l
Dockerのpsコマンドで取得したコンテナ情報
Dockerのpsコマンドで取得したコンテナ情報

上のスクリーンショットの例では、コンテナIDはc3ffc630e44cです。

以下のコマンドで、RedisコンテナをDevKinstaのネットワークに接続します。コンテナIDは置き換えてください。

docker network connect devkinsta_network c3ffc630e44c

Redisコンテナイメージがdevkinsta_network内の実行中のコンテナリストに追加されます。RedisコンテナのネットワークIPアドレスを確認するには、以下のコマンドを実行してください。devkinsta_networkのIDは、network lsコマンドを使って出力したものに置き換えます。

docker inspect d1fa155f7a4d
ターミナルにdocker inspectコマンドの出力が表示される
ターミナルにdocker inspectコマンドの出力が表示される

上のスクリーンショットの例では、demo_redisコンテナのIPアドレスは「172.172.0.6」です。接続を続行する前に、プロジェクトのIPアドレスをどこかにメモしておいてください。

ローカルマシンのWordPressサイトのルートに移動して、DevKinstaに表示されているサイトパスにアクセスします。テキストエディターでwp-config.phpファイルを開き、カスタム構成変数のセクションに以下のコードを貼り付けてください。

define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_HOST', '172.172.0.6');
define('WP_REDIS_PORT', '6379');

WP_REDIS_HOSTに使用するIPアドレスは、docker inspectコマンドを実行してdemo_redis用に出力したものを使用します。

この設定コードによって、プラグインがDevKinstaと同じDockerコンテナとネットワーク内でRedisサーバーにアクセスするためのRedisクライアント、ホスト、ポートが追加されます。

プラグインが接続、実行されていることを確認するには、以下の手順に従ってください。

  1. WordPress管理画面の「プラグイン」ページに移動
  2. Redis Object Cacheの「Settings」をクリック
  3. Enable Object Cache」(オブジェクトキャッシュを有効化)をクリック
Redis Object Cacheは書き込み操作および到達可能だが、有効化が必要
Redis Object Cacheは書き込み操作および到達可能だが、有効化が必要

Redis Object Cacheが有効になると、設定ページが以下のように変化します。

Redisが接続・実行されていることを示すRedis Object Cacheの設定ページ
Redisが接続・実行されていることを示すRedis Object Cacheの設定ページ

Redis CLIを起動する

Redis CLIツール(redis-cli)にはRedisサーバーが付属しており、RedisサーバーはWindowsmacOSLinuxに対応しています。

今回の例では、すでにDockerでRedisを実行しているため、demo_redisコンテナ内で起動します。

docker psコマンドを使用すると、Redisイメージを実行しているコンテナのIDを表示することができたのは先に触れた通りです。先ほどの例では、c3ffc630e44cでした。この切り捨てられたIDを使用し、demo_redisを対象に、その中でコマンドラインシェルを起動します。

docker exec -it c3ffc630e44c /bin/sh

これで、redis-cliツールが起動します。

Dockerのシェルからredis-cliを起動
Dockerのシェルからredis-cliを起動

サーバーにpingを打って、接続をテストしましょう。

ping
redis-cliのpingに対するサーバーのレスポンス
redis-cliのpingに対するサーバーのレスポンス

IPアドレスとポートでRedisサーバーに接続し、テストを行うには、以下のコマンドを実行してください(demo_redisコンテナのIPアドレスを使用)。

redis-cli -h 172.172.0.6 -p 6379 ping
IPアドレスとポートを使ってRedisサーバーにpingを送信
IPアドレスとポートを使ってRedisサーバーにpingを送信

これで、ローカルマシンとDockerコンテナの両方をRedisサーバーに接続することができました。

次に、redis-clikeys *コマンドを使用してデータベース内のすべてのキーを表示し、WordPressサイトがRedisキャッシュにデータを保存していることを確認します。

*アスタリスク(ワイルドカード)検索でRedisデータベース内のすべてのキーを取得
*アスタリスク(ワイルドカード)検索でRedisデータベース内のすべてのキーを取得

すると、上のようにWordPressのデータがすでにRedisキャッシュに保存されていることがわかります。

Redis CLIのCRUD操作

CLIツールを使って、RedisデータベースのCRUD操作を実行することもできます。

先ほど挙げたRedis CLIのkeys *リクエストから、コピーしたキーの値を取得してみます。

get :u.:~8r]mC->Re/gG!&mGU.[{+;]t7o<H~)c*pcU=Lx_Vs{9JkdxkL:X;M-@Y$Svwp:user_meta:1
redis-cliを使用したGETリクエストに対するRedisのレスポンス
redis-cliを使用したGETリクエストに対するRedisのレスポンス

次に、Redisデータベースの内容を操作してみましょう。redis-cliを起動して、setgetdelコマンドでキーと値のペアを作成。新規キーを照会し、それを削除します。

redis-cliを使ったRedisデータベースの簡単なCRUD操作
redis-cliを使ったRedisデータベースの簡単なCRUD操作

上のように削除されたキーの値を取得しようとすると、nilが返されます。

他にも、Redis CLIを使用したより高度な操作は多数あります。

まとめ

Redis CLIは、Redisコマンドを本番環境にプッシュする前にサイト上でテストを行うのに有用です。また、Redisインスタンスのアクティビティを監視することも可能です。

Dockerでは、Redisインスタンスにを介して、単一のコンテナでデータベースを管理するのに必要な機能(redis-cliを含む)を利用することができます。

一方、DevKinstaの”Docker化”プロセスを活用すれば、ローカルマシンでWordPressサイトを開発し、数回のクリックで本番環境にデプロイすることができます。

118,000件のWordPressサイトを支えるKinstaのホスティングを利用したことはありますか?高度なサイト管理ツールを搭載した優れたホスティングをお探しなら、KinstaのWordPress専用マネージドホスティングをお試しください。

Steve Bonisteel Kinsta

Kinstaのテクニカルエディター。救急車や消防車を追いかける記者としてキャリアをスタート。1990年代後半からインターネット関連の技術情報を担当している。