WordPressサイトのサイトヘルス画面で表示される「永続オブジェクトキャッシュを使用してください」の対策として、Synology NASでRedisサーバのインストールを行い、WordPressサイトに「Redis Object Cache」プラグインをインストールして、Redisサーバへの接続を行いました。
前提 本記事でのDSM(OS)バージョンは、Synology DSM 7.1 を用いています。
1.永続オブジェクトキャッシュについて
WordPress6.1以降、サイトヘルス画面に「永続オブジェクトキャッシュを使用してください」という改善項目が表示されるようになりました。
永続オブジェクトキャッシュについての詳細説明は、WordPressのサポートページに記載されておりますが、一言でいうと、Webサーバ(WordPress)とバックエンドのDBサーバの間に配置されて、DBアクセス性能を向上させるものであり、以下2つのサーバが推奨されていました。
- Redis (プラグインはRedis Object Cache)
- Memcached (プラグインはMemcached Object Cache)
Webホスティングサービスであればプロバイダー側でサーバを立ててくれるのでしょうが、Synology NASでWebサイト運営をしている場合は自力で対応しなければなりません。
今回は、RedisサーバのインストールとWordPressサイトにプラグインのインストールを行って、Redisサーバに接続を行い、永続オブジェクトキャッシュを有効化させる設定を行いました。
なお、Redisサーバのインストールは、Synology DSM用のPKGは無い為、Dockerで行いました。
2.Redisについて
Redisは、高速でオープンソースのキーバリューストアデータベースです。Redisは、主にメモリ内で動作し、ディスクに書き込むこともできますが、これはパフォーマンスのために使用されます。 Redisは、キーとその対応する値のペアを保存し、クライアントがキーを使用して値を取得または更新できるようにします。
Redisは、次のような機能を提供します。
- データの永続性:Redisは、データをディスクに書き込んで永続的に保存できます。
- データのタイプ:Redisは、文字列、リスト、セット、ソート済みセット、ハッシュ、ビットマップなど、複数のデータ型をサポートしています。
- データの操作:Redisは、データを追加、更新、削除するための多くのコマンドを提供しています。
- パフォーマンス:Redisは、データがメモリ内にあるため、非常に高速であり、大量の読み取り/書き込み操作に対しても高いパフォーマンスを発揮します。
- スケーラビリティ:Redisは、複数のマスターサーバーを使用してスケーラブルなアーキテクチャをサポートしています。
Redisは、データのキャッシュ、セッションストア、リアルタイムリスト、ランキング、地理空間データなど、様々な用途に使用されています。また、Redisは、JavaScript、Python、Ruby、PHP、Javaなど、多くのプログラミング言語で使用できるようになっています。
3.Dockerパッケージのインストール
Synology NASにDockerパッケージがインストールされていなければ、インストールを行います。
以下の記事の2章を参考にしてください。
4.Redisサーバのインストール
Redisサーバのインストール手段として、Dockerコンソール(GUI)によるインストールとコマンドライン(CLI)によるインストールの2つの方法を紹介します。
コマンドラインによるインストールのほうが簡単ですので、可能であればこちらを推奨します。
4-1.Dockerコンソール(GUI)によるインストール
Dockerの[レジストリ]よりイメージのダウンロードを行います。
検索テキストボックス(キーワードを挿入)に[redis]を入力すると、DockerHUBよりダウンロード可能なイメージの一覧が表示されます。
公式サイトのインストール説明にある[redis/redis-stack]をダウンロードしました。
ダイアログボックスが表示され、[タグの選択]が表示されるので、バージョンとしては最新を示す[latest]を指定します。
[選択]をクリックした後、暫くすると[イメージ]に[redis/redis-stack]のコンテナイメージがダウンロードされます。
Dockerの[イメージ]より、[redis/redis-stack]を選択して、[起動]をクリックすると、コンテナの作成ウィザードが開始されます。
ネットワークの指定はデフォルトのままでよいので、[次へ]をクリックします。
コンテナの[全般設定]ではコンテナ名を入力し、[次へ]をクリックします。
ポート設定を行います。
ローカルポートの入力エリアにコンテナポートと同じポート番号を入力します。
入力が終われば[次へ]をクリックします。
[ボリューム設定]ダイアログではそのまま[次へ]をクリックします。
ここまでの設定が[要約]ダイアログに表示されるので、内容を確認して[完了]をクリックします。
redis/redis-stackのコンテナが指定した名称で生成されました。
4-2.コマンドライン(CLI)によるインストール
コマンドライン操作が可能であればこちらのほうが簡単です。
sshでNASにログインし、rootユーザになってから以下のコマンドを実行します。
docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest
イメージのダウンロード(未ダウンロードであれば)からコンテナ生成まで上記コマンド一発で実行されます。
docker psコマンドで、コンテナが起動していることを確認します。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d44a5e816a7 redis/redis-stack:latest "/entrypoint.sh" 33 minutes ago Up 33 minutes 0.0.0.0:6379->6379/tcp, 0.0.0.0:8001->8001/tcp redis-stack
5.WordPressサイトにプラグインのインストール
WordPressサイトに「Redis Object Cache」プラグインをインストールします。
プラグインの新規追加画面にて、キーワードに「Redis Object Cache」を入力し、プラグインを「今すぐインストール」でインストールし、有効化します。
プラグイン有効化後、設定メニューの「Redis」を選択し、「Redis Object Cache」の設定画面を表示させます。
「Enable Object Cache」をクリックします。
Statusが「Connected」に変化し、WordPressサイトとRedisサーバが接続状態となりました。
暫くすると、Metrics画面にも測定値が表示されるようになります。
ダッシュボード画面にも「Redis Object Cache」の測定値が表示されるようになります。
また、「サイトヘルスステータス」もすべて合格となっています。
ブラウザで[自分のNASのIPアドレス:8001]をURLに指定することにより、RedisサーバのDB(キャッシュ)の中を参照できるGUI画面が表示されます。
WordPressのサイトヘルス画面にて、改善項目なしとなり、「すばらしい!」表示となりました。
6.注意事項
Redisサーバには、複数のWordPressのサイトを接続することが可能なのですが、「Redis Object Cache」プラグインでは、Redisサーバ内でサイトを切り分けるキー項目にWordPressのデーターベースのテーブル接頭辞を使用している模様です。
よって、複数のWordPressサイトを接続させる場合は、接続対象のWordPressサイトのテーブル接頭辞が重複しないようにしておく必要があります。(でないと、Redisサーバのデーターベースが重複してWordPressサイトが異常な動作をすることとなります。)
当サイトも本番サイトとテストサイトのテーブル接頭辞が被っていたため、テストサイト側のテーブル接頭辞の変更を行いました。
テーブル接頭辞の変更を行うプラグイン(Change Tabel Prefix)があるのですが、使ってみたところ、見事にサイトがクラッシュしてしまったため、やむを得ずサイト自体を再インストールし、インストール時にテーブル接頭辞の変更を行いました。(その後バックアップデータからリストアしてサイトを復元)
7.まとめ
WordPressサイトのサイトヘルス画面で表示される「永続オブジェクトキャッシュを使用してください」の対策として、Redisサーバのインストール方法と、WordPressサイトへの「Redis Object Cache」プラグインのインストールおよびセットアップ方法について紹介しました。
当サイトはもともとページキャッシュプラグインを導入していたこともあり、ページキャッシュが効いている状態のアクセス速度にはあまり影響がないと思われますが、キャッシュが効いていない状態での性能が若干向上したように感じます。
以上、最後まで記事を読んでいただき、ありがとうございました。