セッションとオブジェクトのキャッシュにMemcachedを使う
MemcachedをPHPオブジェクト向けの分散インメモリストアとして使います
「セッションとオブジェクトのキャッシュにMemcachedを使う」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
Memcachedとは何ですか
Memcachedは、高性能な分散インメモリキーバリューストアです。PHPアプリケーションで、データベースクエリの結果やセッションデータのキャッシュに広く使用されています。
インストール
MemcachedサーバーとPHP拡張機能をインストールします。
# Ubuntu/Debian:
$ apt install memcached php-memcached
$ service memcached start
# Verify:
$ php -m | grep memcachedMemcachedへの接続
Memcachedのインスタンスを作成し、1台以上のサーバーを追加します。
<?php
$mc = new Memcached();
$mc->addServer("127.0.0.1", 11211);
// Multiple servers (distributed caching):
$mc->addServers([
["192.168.1.10", 11211],
["192.168.1.11", 11211],
]);基本的なキャッシュ操作
キャッシュエントリの設定、取得、削除、置換を行います。
<?php
// Set with TTL:
$mc->set("product:1", $productData, 600); // 10 min
// Get:
$product = $mc->get("product:1");
if ($mc->getResultCode() === Memcached::RES_NOTFOUND) {
$product = fetchFromDB(1);
$mc->set("product:1", $product, 600);
}
// Delete:
$mc->delete("product:1");Memcachedを使ったセッションストレージ
高速で、複数のWebサーバーから共有してアクセスできるように、PHPセッションをMemcachedに保存します。
# php.ini:
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"LaravelとMemcachedの統合
MemcachedをLaravelのキャッシュドライバーとして設定し、使用します。
# .env
CACHE_DRIVER=memcached
MEMCACHED_HOST=127.0.0.1
// Usage is identical to Redis via Cache facade:
Cache::put("key", $value, 300);
$value = Cache::get("key");MemcachedとRedisの比較
Memcached:シンプルでマルチスレッド、完全なインメモリ(永続化なし)です。Redis:より豊富なデータ型、任意の永続化(AOF/RDB)、Pub/Sub、クラスターを備えています。純粋なキャッシュ用途では、どちらも同程度の性能を発揮します。新規プロジェクトでは、一般的にRedisが推奨されます。
分散キャッシュ
Memcachedは、一貫性ハッシュを使用して複数のサーバーにキーをネイティブに分散します。トラフィックの増加に合わせて水平スケーリングできます。
アトミックCAS(Compare-And-Swap)
Memcachedは、最後に読み取ってから他のクライアントによる変更がない場合にのみ値を安全に更新するCAS操作をサポートしています。
<?php
$mc->get("counter", null, $cas);
$mc->cas($cas, "counter", $newValue, 60);TTLの制限
MemcachedのTTLは最大30日に制限されています。約1MBを超える値は拒否されます。キャッシュ値は小さく保ち、効率的にシリアライズしてください。
監視
memcached-tool 127.0.0.1:11211 statsを使用すると、ヒット率、メモリ使用量、エビクションを確認できます。ヒット率が低い、またはエビクション数が多い場合は、キャッシュ容量が不足しています。
まとめ
Memcachedは、シンプルな分散オブジェクトキャッシュやセッションキャッシュに適しています。LaravelではCACHE_DRIVER=memcachedを設定します。本番環境でより豊富な機能が必要な場合は、Redisを推奨します。
理解度チェック
MemcachedとRedisの主な違いを1つ挙げてください。
よくある質問
「セッションとオブジェクトのキャッシュにMemcachedを使う」レッスンは無料ですか?
はい。「セッションとオブジェクトのキャッシュにMemcachedを使う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「セッションとオブジェクトのキャッシュにMemcachedを使う」で何を学びますか?
MemcachedをPHPオブジェクト向けの分散インメモリストアとして使います ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「セッションとオブジェクトのキャッシュにMemcachedを使う」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- PHPでキャッシュが重要な理由
- PHPのキャッシュバックエンドとしてRedisを使う
- セッションとオブジェクトのキャッシュにMemcachedを使う
- キャッシュ無効化のパターン