序章

Redisは、メモリ内ストアとキャッシュの両方として機能できるオープンソースのKeyValueStoreです。 Redisは、このチュートリアルで行っているように、それ自体でデータベースサーバーとして使用することも、MySQLなどのリレーショナルデータベースと組み合わせて処理を高速化することもできるデータ構造サーバーです。

このチュートリアルでは、RedisをWordPressのキャッシュとして構成し、WordPressページのレンダリングに使用される冗長で時間のかかるデータベースクエリを軽減します。 その結果、WordPressサイトがはるかに高速になり、使用するデータベースリソースが少なくなり、調整可能な永続キャッシュが提供されます。 このガイドはUbuntu14.04に適用されます。

サイトはそれぞれ異なりますが、以下は、このガイドで構成されている、Redisを使用した場合と使用しない場合のデフォルトのWordpressインストールホームページのベンチマークの例です。 Chromeデベロッパーツールを使用して、ブラウザのキャッシュを無効にしてテストしました。

RedisなしのデフォルトのWordPressホームページ:

804msのページ読み込み時間

Redisを使用したデフォルトのWordPressホームページ:

449msのページ読み込み時間

注: WordPress用のRedisキャッシングのこの実装は、十分にコメントされているがサードパーティのスクリプトに依存しています。 スクリプトはDigitalOceanのアセットサーバーでホストされていますが、外部で開発されました。 WordPress用のRedisキャッシングの独自の実装を作成したい場合は、ここに示されている概念に基づいて、さらにいくつかの作業を行う必要があります。

Redisと Memcached

Memcachedも人気のあるキャッシュの選択肢です。 ただし、この時点で、RedisはMemcachedが実行できるすべてのことを実行し、はるかに大きな機能セットを使用します。 このStackOverflowページには、Redisを初めて使用する人の概要または紹介としていくつかの一般的な情報があります。

キャッシングはどのように機能しますか?

WordPressページが初めて読み込まれると、サーバーでデータベースクエリが実行されます。 Redisは、このクエリを記憶、つまりキャッシュします。 そのため、別のユーザーがWordpressページを読み込むと、データベースにクエリを実行しなくても、Redisとメモリから結果が提供されます。

このガイドで使用されているRedisの実装は、WordPressの永続オブジェクトキャッシュとして機能します(有効期限なし)。 オブジェクトキャッシュは、WordPressページをロードするために必要なSQLクエリをメモリにキャッシュすることで機能します。

ページが読み込まれると、結果のSQLクエリ結果はRedisによってメモリから提供されるため、クエリがデータベースにヒットする必要はありません。 その結果、ページの読み込み時間が大幅に短縮され、データベースリソースへのサーバーの影響が少なくなります。 クエリがRedisで利用できない場合、データベースが結果を提供し、Redisがその結果をキャッシュに追加します。

データベースで値が更新された場合(たとえば、WordPressで新しい投稿やページが作成された場合)、そのクエリのRedis値は無効になり、キャッシュされた不正なデータが表示されなくなります。

キャッシュで問題が発生した場合は、Redisコマンドラインからflushallコマンドを使用してRedisキャッシュを削除できます。

redis-cli

プロンプトが表示されたら、次のように入力します。

flushall

追加リファレンス:WordPressオブジェクトキャッシュドキュメント

前提条件

このガイドを開始する前に、sudoユーザーを設定してWordPressをインストールする必要があります。

  • Ubuntu 14.04ドロップレット(1 GB以上を推奨)
  • sudoユーザーを追加します
  • WordPressをインストールします。 このガイドはこれらの手順でテストされていますが、WordPressをインストールする方法はたくさんあります

ステップ1—Redisをインストールする

WordPressでRedisを使用するには、redis-serverphp5-redisの2つのパッケージをインストールする必要があります。 redis-serverパッケージはRedis自体を提供し、php5-redisパッケージはWordPressなどのPHPアプリケーションがRedisと通信するためのPHP拡張機能を提供します。

softareをインストールします。

sudo apt-get install redis-server php5-redis

ステップ2—Redisをキャッシュとして設定する

Redisは、NoSQLデータベースストアとしてもキャッシュとしても動作できます。 このガイドとユースケースでは、Redisはキャッシュとして構成されます。 これを行うには、次の設定が必要です。

ファイル/etc/redis/redis.confを編集し、下部に次の行を追加します。

sudo nano /etc/redis/redis.conf

ファイルの最後に次の行を追加します。

maxmemory 256mb
maxmemory-policy allkeys-lru

変更が完了したら、ファイルを保存して閉じます。

ステップ3—Redisキャッシュバックエンドスクリプトを取得する

このWordPress用のPHPスクリプトは、もともと EricMannによって開発されました。 これは、WordPress用のRedisオブジェクトキャッシュバックエンドです。

object-cache.phpスクリプトをダウンロードします。 このダウンロードはDigitalOceanのアセットサーバーからのものですが、これはサードパーティのスクリプトです。 スクリプトのコメントを読んで、スクリプトがどのように機能するかを確認する必要があります。

PHPスクリプトをダウンロードします。

wget https://assets.digitalocean.com/articles/wordpress_redis/object-cache.php

ファイルをWordPressインストールの/wp-contentディレクトリに移動します。

sudo mv object-cache.php /var/www/html/wp-content/

WordPressのインストールによっては、場所が異なる場合があります。

ステップ4—wp-config.phpでキャッシュ設定を有効にする

次に、wp-config.phpファイルを編集して、サイトの名前(または任意の文字列)でキャッシュキーソルトを追加します。

nano /var/www/html/wp-config.php

* Authentication Unique Keys and Salts.セクションの最後に次の行を追加します。

define('WP_CACHE_KEY_SALT', 'example.com');

ドメイン名または別の文字列をソルトとして使用できます。

注:複数のWordPressサイトをホストしているユーザーの場合、独自のキャッシュキーソルトがある限り、各サイトは同じRedisインストールを共有できます。

また、WP_CACHE_KEY_SALT行の後に次の行を追加して、Redisオブジェクトキャッシュプラグインで永続キャッシュを作成します。

define('WP_CACHE', true);

まとめると、ファイルは次のようになります。

 * Authentication Unique Keys and Salts.
 
. . .
 
define('NONCE_SALT',       'put your unique phrase here');

define('WP_CACHE_KEY_SALT', 'example.com');
define('WP_CACHE', true);

ファイルを保存して閉じます。

ステップ5—RedisとApacheを再起動します

最後に、redis-serviceapache2を再起動します。

Redisを再起動します。

sudo service redis-server restart

Apacheを再起動します。

sudo service apache2 restart

php5-fpmを使用している場合は、再起動します。 これは、DigitalOceanの基本的なインストールの一部ではありません。

sudo service php5-fpm restart 

それでおしまい! 現在、WordPressサイトはRedisキャッシングを使用しています。 ページの読み込み速度とリソースの使用を確認すると、改善に気付くはずです。

redis-cliでRedisを監視する

Redisを監視するには、次のようにredis-cliコマンドを使用します。

redis-cli monitor

このコマンドを実行すると、キャッシュされたクエリを提供するRedisのリアルタイム出力が表示されます。 何も表示されない場合は、Webサイトにアクセスしてページをリロードしてください。

以下は、Redisを使用してこのガイドに従って構成されたWordPressサイトからの出力例です。

OK
1412273195.815838 "monitor"
1412273198.428472 "EXISTS" "example.comwp_:default:is_blog_installed"
1412273198.428650 "GET" "example.comwp_:default:is_blog_installed"
1412273198.432252 "EXISTS" "example.comwp_:options:notoptions"
1412273198.432443 "GET" "example.comwp_:options:notoptions"
1412273198.432626 "EXISTS" "example.comwp_:options:alloptions"
1412273198.432799 "GET" "example.comwp_:options:alloptions"
1412273198.433572 "EXISTS" "example.comwp_site-options:0:notoptions"
1412273198.433729 "EXISTS" "example.comwp_:options:notoptions"
1412273198.433876 "GET" "example.comwp_:options:notoptions"
1412273198.434018 "EXISTS" "example.comwp_:options:alloptions"
1412273198.434161 "GET" "example.comwp_:options:alloptions"
1412273198.434745 "EXISTS" "example.comwp_:options:notoptions"
1412273198.434921 "GET" "example.comwp_:options:notoptions"
1412273198.435058 "EXISTS" "example.comwp_:options:alloptions"
1412273198.435193 "GET" "example.comwp_:options:alloptions"
1412273198.435737 "EXISTS" "example.comwp_:options:notoptions"
1412273198.435885 "GET" "example.comwp_:options:notoptions"
1412273198.436022 "EXISTS" "example.comwp_:options:alloptions"
1412273198.436157 "GET" "example.comwp_:options:alloptions"
1412273198.438298 "EXISTS" "example.comwp_:options:notoptions"
1412273198.438418 "GET" "example.comwp_:options:notoptions"
1412273198.438598 "EXISTS" "example.comwp_:options:alloptions"
1412273198.438700 "GET" "example.comwp_:options:alloptions"
1412273198.439449 "EXISTS" "example.comwp_:options:notoptions"
1412273198.439560 "GET" "example.comwp_:options:notoptions"
1412273198.439746 "EXISTS" "example.comwp_:options:alloptions"
1412273198.439844 "GET" "example.comwp_:options:alloptions"
1412273198.440764 "EXISTS" "example.comwp_:options:notoptions"
1412273198.440868 "GET" "example.comwp_:options:notoptions"
1412273198.441035 "EXISTS" "example.comwp_:options:alloptions"
1412273198.441149 "GET" "example.comwp_:options:alloptions"
1412273198.441813 "EXISTS" "example.comwp_:options:notoptions"
1412273198.441913 "GET" "example.comwp_:options:notoptions"
1412273198.442023 "EXISTS" "example.comwp_:options:alloptions"
1412273198.442121 "GET" "example.comwp_:options:alloptions"
1412273198.442652 "EXISTS" "example.comwp_:options:notoptions"
1412273198.442773 "GET" "example.comwp_:options:notoptions"
1412273198.442874 "EXISTS" "example.comwp_:options:alloptions"
1412273198.442974 "GET" "example.comwp_:options:alloptions"

CTRL-Cを押して出力を停止します。

これは、Redisが処理しているクエリを正確に確認するのに役立ちます。

結論

このガイドに従うと、WordPressはUbuntu14.04のキャッシュとしてRedisを使用するように構成されます。

以下は、WordPressの追加のセキュリティおよび管理ガイドです。

UbuntuのWordPressで安全なアップデートとインストールを構成する方法

WPScanを使用してWordpressの脆弱なプラグインとテーマをテストする方法

WP-CLIを使用してコマンドラインからWordPressサイトを管理する方法