Webサイトを高速化!PHPとMemcachedでデータベース負荷を軽減する方法

PHP

導入

このブログのキャッチコピーは「未来の自分のための技術メモ、時々あなたのためのヒント。」ですが、今回はあなたのWebサイトの表示速度を改善する、非常に効果的な「ヒント」です。

「自社のサイト、最近なんだか表示が遅いな…」

「アクセスが増えると、データベースサーバーが重くなってしまう…」

こうした悩みの多くは、データベースへのアクセスのしすぎが原因です。この記事では、**「Memcached(メムキャッシュディー)」**という技術を使って、このデータベースの負荷を劇的に減らし、Webサイトを高速化する基本的な方法を解説します。


なぜキャッシュが必要? レストランの「作り置き」に例える

毎回お客さんが注文するたびに、一から食材を切って調理を始めていたら、レストランは大変ですよね。人気のメニューは、ある程度「作り置き(仕込み)」をしておくことで、素早く提供できます。

Webサイトにおけるキャッシュも、この「作り置き」と全く同じ考え方です。

  • データベース: 食材が保管されている「冷蔵庫」
  • Webアプリケーション: 注文を受けて調理する「シェフ」
  • Memcached: 調理済みの料理を一時的に置いておく「保温カウンター」

毎回「冷蔵庫」に食材を取りに行くのではなく、「保温カウンター」によく出る料理を置いておくことで、お客さん(サイト訪問者)を待たせずに素早く料理を提供できる、というわけです。


Memcachedの導入3ステップ

それでは、実際にサーバーにMemcachedを導入していきましょう。

Step 1: Memcachedをインストールする

まずは、yum(またはdnf)コマンドを使って、Memcached本体をサーバーにインストールします。

sudo yum install memcached

Step 2: PHPから使えるようにする

次に、PHP(シェフ)がMemcached(保温カウンター)を使えるように、通訳役となるPHPの拡張機能をインストールします。

# PECLを使ってphp-memcachedをインストール
sudo pecl install memcached

インストール後、php.iniという設定ファイルにextension=memcached.soという一行を追記し、Webサーバー(Apacheなど)を再起動します。

Step 3: Memcachedを起動する

最後に、Memcachedサービスを起動し、サーバーを再起動しても自動で立ち上がるように設定します。

# memcachedサービスを起動
sudo systemctl start memcached

# OS起動時に自動で起動するように設定
sudo systemctl enable memcached

PHPでの基本的な使い方

Memcachedの使い方は非常にシンプルで、「キー(料理名)」と「バリュー(料理そのもの)」をセットで保存し、後でキーを指定して取り出すだけです。

簡単なPHPコードの例:

<?php
// Memcachedサーバーに接続
$mc = new Memcached();
$mc->addServer('127.0.0.1', 11211);

$key = 'top_page_article_list'; // キー(キャッシュの名前)

// 1. まずはキャッシュを探しに行く
$articles = $mc->get($key);

// 2. もしキャッシュがなければ(作り置きがなければ)
if (!$articles) {
    echo "(キャッシュがなかったので、DBからデータを取得しました)\n";
    // DBから重いデータを取得する処理...
    $articles = get_heavy_data_from_database();
    
    // 3. 取得したデータを、10分間だけキャッシュに保存する
    $mc->set($key, $articles, 600); // 600秒 = 10分
} else {
    echo "(キャッシュがあったので、DBにはアクセスせず高速に表示しました)\n";
}

// 取得したデータを使ってページを表示
var_dump($articles);

// --- 本来DBにアクセスする重い処理の代わり ---
function get_heavy_data_from_database() {
    // ここで時間がかかるDBクエリが実行されると仮定
    sleep(2);
    return ['article1', 'article2', 'article3'];
}
?>

このコードを実行すると、初回は2秒かかりますが、2回目以降(10分以内)はキャッシュが使われるため、一瞬で結果が返ってきます。


まとめ

今回は、Memcachedを使ってWebサイトの表示を高速化する基本的な方法をご紹介しました。

  • アクセスの多いページ
  • 更新頻度の低いデータ
  • 生成に時間がかかる計算結果

こうしたものを積極的にキャッシュしていくことで、ユーザー体験を向上させ、サーバーの負荷を下げることができます。

この記事が、あなたのサイトのパフォーマンスを改善する「ヒント」になれば幸いです。

コメント

タイトルとURLをコピーしました