2026年8月9日
2026年8月9日
WordPressのオブジェクトキャッシュをMemcachedにする手順(Ubuntu 24.04)
WordPress は、オプションや投稿、ユーザー情報などを DB から読み込むと、その結果を「オブジェクトキャッシュ」に入れて同じリクエストの中で使い回します。ただし標準のオブジェクトキャッシュは PHP のメモリ上にあるだけなので、リクエストが終わると消えます。次のアクセスでは、また DB から読み込み直します。
Memcached のようなキャッシュサーバーにオブジェクトキャッシュを保存すると(永続オブジェクトキャッシュ)、リクエストをまたいで結果を使い回せるため、DB への問い合わせを減らせます。この記事では、Ubuntu 24.04 のサーバーで WordPress のオブジェクトキャッシュを Memcached に保存する手順を説明します。
オブジェクトキャッシュが効く場面・効かない場面
| 場面 | 効果 |
|---|---|
| ログインして管理画面を使う、会員サイト、ネットショップのカートなど、ページキャッシュを使えないアクセスが多い | 効きやすい。毎回の DB 問い合わせが減る |
| DB の負荷が高い(同じ問い合わせが何度も実行されている) | 効きやすい |
| ほとんどのアクセスがページキャッシュ(キャッシュプラグイン、Varnish、CDN)から返っている | 効果は小さい。PHP 自体がほとんど動かないため |
Memcached はページ全体を保存する仕組みではありません。ページの表示を速くしたい場合は、ページキャッシュと組み合わせて使います。
必要なもの
WordPress が Memcached を使うには、次の3つがそろっている必要があります。
- Memcached のサーバー(デーモン)
- PHP から Memcached に接続する拡張(
memcacheまたはmemcached) - WordPress のオブジェクトキャッシュを Memcached に切り替える
wp-content/object-cache.php(ドロップイン)
object-cache.php を用意する方法はいくつかあります。
| 方法 | 使う PHP 拡張 | 備考 |
|---|---|---|
プラグイン「Memcached Object Cache」(スラッグ memcached)の object-cache.php を手で置く |
memcache |
この記事の方法。2026年11月時点の配布版は 4.0.0 で、最終更新は 2022年11月、動作確認済みの表記は WordPress 6.1 まで |
| W3 Total Cache の設定で、オブジェクトキャッシュの方式に Memcached を選ぶ | プラグインの案内を確認 | 2026年11月時点も更新が続いている。ページキャッシュなどとまとめて設定する場合に向く |
Memcached Object Cache は長く更新されていません。WordPress 7.1.4・PHP 8.3 の環境で試したところ、別々のリクエストの間で値が共有され、サイトも正常に表示されましたが、WP_DEBUG を有効にすると、1回のアクセスごとに「Creation of dynamic property WP_Object_Cache::$… is deprecated」という非推奨の通知が6件記録されました。PHP 8.2 以降で動的プロパティが非推奨になったためで、動作は止まりませんが、将来の PHP で使えなくなるおそれがあります。保守が続いているものを使いたい場合は、W3 Total Cache の Memcached 対応か、Redis のドロップインを選んでください。
手順1: Memcachedをインストールする
sudo apt update
sudo apt install memcached libmemcached-tools
sudo systemctl enable --now memcached
systemctl status memcached --no-pager
libmemcached-tools は、状態を確認する memcstat などのコマンドが入ったパッケージです。2026年11月時点で Ubuntu 24.04 から入る Memcached は 1.6.24 です。
設定ファイルは /etc/memcached.conf です。Ubuntu のパッケージでは、初期状態で次のようになっています。
-m 64
-p 11211
-u memcache
-l 127.0.0.1
-l ::1
| 設定 | 意味 |
|---|---|
-m 64 |
キャッシュに使う最大メモリ(MB)。足りなくなると古いものから捨てられる |
-p 11211 |
待ち受けるポート |
-l 127.0.0.1 / -l ::1 |
待ち受けるアドレス。初期状態でサーバー自身からの接続だけを受け付ける |
WordPress と Memcached を同じサーバーで動かすなら、-l は変えません。メモリを増やすときは -m の値を変えて再起動します。
sudo sed -i 's/^-m 64$/-m 128/' /etc/memcached.conf
sudo systemctl restart memcached
memcstat --servers=127.0.0.1
memcstat で version や limit_maxbytes(最大メモリのバイト数)が表示されれば、Memcached は動いています。
手順2: PHPのmemcache拡張を入れる
Memcached Object Cache は、memcache 拡張(末尾に d が付かない方)を使います。
sudo apt install php-memcache
php -m | grep -i memcache
拡張を読み込ませるため、PHP を動かしているサービスを再起動します。PHP-FPM の場合は次のとおりです(Apache + mod_php なら apache2 を再起動します)。
sudo systemctl restart php8.3-fpm
PHP-FPM 側でも読み込まれているかは、次のコマンドで確認できます。
php-fpm8.3 -m | grep -i memcache
手順3: wp-config.phpに設定を書く
object-cache.php を置く前に、wp-config.php の「編集が必要なのはここまでです」の行より上に、次の2つを書きます。
<?php
// キャッシュのキーの前に付ける文字列。サイトごとに別の長いランダムな文字列にする
define( 'WP_CACHE_KEY_SALT', 'ここにランダムな文字列' );
// 接続する Memcached サーバー
$memcached_servers = array(
'default' => array(
'127.0.0.1:11211',
),
);
WP_CACHE_KEY_SALTは、同じ Memcached を複数の WordPress で使ったときに、キャッシュが混ざらないようにするための値です。openssl rand -hex 32などで作った文字列を入れます。$memcached_serversのdefaultは、すべてのキャッシュグループで使うサーバーの一覧です。Memcached が同じサーバーにあるなら省略してもかまいません(省略時は127.0.0.1:11211に接続します)。
WP_CACHE は、ページキャッシュ用の advanced-cache.php を有効にする定数で、オブジェクトキャッシュとは関係ありません。また WP_REDIS_HOST などは Redis 用のプラグインの設定なので、Memcached では使いません。
手順4: object-cache.phpを置く
WP-CLI でプラグインをダウンロードし、中の object-cache.php を wp-content 直下にコピーします。プラグインを有効化する必要はありません。
cd /var/www/html
wp plugin install memcached
cp wp-content/plugins/memcached/object-cache.php wp-content/object-cache.php
/var/www/html は WordPress を置いているディレクトリに合わせてください。object-cache.php は wp-content 直下に置いたときだけ読み込まれます。プラグインのフォルダーに入ったままでは使われません。
手順5: 動作を確認する
WP-CLI で、オブジェクトキャッシュの種類と、別々のプロセスの間で値が共有されることを確認します。
wp cache type
wp eval 'wp_cache_set( "memcached_test", "ok", "test", 300 );'
wp eval 'var_dump( wp_cache_get( "memcached_test", "test" ) );'
wp cache type が Memcache と表示され、2つ目の wp eval で string(2) "ok" が表示されれば、値が Memcached に保存されています。標準のオブジェクトキャッシュのままだと、2つ目は bool(false) になります。
サイトをいくつか開いたあとに memcstat を実行し、curr_items(保存されている件数)や get_hits(キャッシュから返せた回数)が増えていることも確認します。
memcstat --servers=127.0.0.1 | grep -E 'curr_items|get_hits|get_misses'
元に戻す・キャッシュを消す
- キャッシュをすべて消す:
wp cache flushを実行します。このドロップインは Memcached 全体を消すのではなく、そのサイトのキーの番号を切り替えて古いキャッシュを使わないようにする方式なので、同じ Memcached を使っている他のサイトには影響しません。 - Memcached を使うのをやめる:
wp-content/object-cache.phpを削除します。プラグインを削除してもobject-cache.phpは残るので、手で消す必要があります。 - Memcached を止める前に: 先に
object-cache.phpを削除します。Memcached に接続できない状態でも、ページは DB から読み込んで表示されますが、接続を待つ時間がかかり、検証では停止直後のアクセスで表示に約5秒かかりました。
安全に使うための注意
- 外部に公開しない: Memcached には標準でパスワード認証がありません。
-l 127.0.0.1のままにし、11211 番ポートをファイアウォールで閉じておきます。Memcached を別のサーバーに置く場合は、プライベートネットワークのアドレスで待ち受け、WordPress のサーバーからだけ接続を許可します。 - UDP は無効のまま: Memcached 1.5.6 以降は UDP が初期状態で無効です(
-U 0)。UDP を有効にすると DDoS の反射攻撃に悪用されることがあるため、有効にしません。 - 消えてもよいデータだけ: Memcached の内容は、再起動したときやメモリが足りなくなったときに消えます。WordPress は消えたものを DB から読み直すので問題ありませんが、Memcached を保存先として使うコードは書かないでください。
- メモリの大きさ:
memcstatのevictions(メモリ不足で捨てられた件数)が増え続ける場合は、-mを増やします。サーバー全体のメモリに余裕があるかも確認します。
まとめ
- Memcached に保存すると、WordPress のオブジェクトキャッシュがリクエストをまたいで使われ、DB への問い合わせが減る
- 必要なのは Memcached 本体・PHP の
memcache拡張・wp-content/object-cache.phpの3つ wp-config.phpにWP_CACHE_KEY_SALTと$memcached_serversを書いてからobject-cache.phpを置くwp cache typeとwp evalで、値が別のプロセスと共有されることを確認する- Memcached は 127.0.0.1 だけで待ち受け、外部に公開しない
関連記事: