ホームページ  >  記事  >  バックエンド開発  >  PHP と Memcached の統合と使用の詳細な説明

PHP と Memcached の統合と使用の詳細な説明

WBOY
WBOYオリジナル
2023-06-25 13:04:40974ブラウズ

Web アプリケーションの開発に伴い、より優れたパフォーマンスと高いスケーラビリティを提供するために、完全なメモリ キャッシュ システムを使用するアプリケーションがますます増えています。多くの場合、Memcached が推奨されるソリューションになります。この記事では、PHP と Memcached の統合的な使用法と、関連する使用上のヒントを紹介します。

Memcached は、動的 Web アプリケーションを高速化するために使用できる高性能のメモリ内オブジェクト キャッシュ システムです。 Memcached はもともと Brad Fitzpatrick によって作成され、主な目的は彼の LiveJournal ソーシャル ネットワーキング Web サイト用でした。 Memcached は分散キャッシュ システムとして設計されているため、スケーラブルで高性能です。

PHP での Memcached の使用

PHP の PECL 拡張機能を使用すると、PHP アプリケーションと Memcached を簡単に統合できます。以下は、PHP を使用して Memcached の基本的な get および set 操作を実装する簡単な例です。

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

//存储数据
$memcached->set("key1", "value1");

//获取数据
$value = $memcached->get("key1");
echo $value;
?>

上の例では、最初に Memcached オブジェクトを使用して Memcached サーバーに接続し、次に ## を使用します。 #set() 関数はキーと値のペアをキャッシュに保存し、最後に get() 関数を使用してキャッシュからキー値を取得します。非常にシンプルで直感的です。

アプリケーションでの Memcached の使用

実際のアプリケーションで Memcached を使用する最も一般的な方法は、データベース クエリの結果、テンプレートなどの計算量の多いデータのキャッシュとパフォーマンスの向上に使用することです。計算結果などMemcached は、競合を避けるために同時リクエストを制御するロック システムとしてもサポートしています。

次は、Memcached を使用して MySQL クエリ結果をキャッシュする例です:

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

//查询MySQL数据库
$results = mysqli_query($con, "SELECT * FROM users WHERE status=1");

//循环结果
while($row = mysqli_fetch_array($results)) {
   //将结果存储到缓存中
   $memcached->set($row['user_id'], $row);
}

//关闭MySQL连接
mysqli_close($con);

//获取结果
$user_id = 123;
$result = $memcached->get($user_id);
?>

上の例では、最初に Memcached サーバーに接続し、MySQL データベースにクエリを実行して、結果をキャッシュ。すると、具体的な結果が得られます。結果がキャッシュされている場合は、結果がすぐに返されるため、結果を繰り返しクエリする必要がなくなります。

実際のアプリケーションで、Memcached を使用して巨大なデータ オブジェクトをキャッシュする場合は、Memcached の分散メカニズムを使用することをお勧めします。これについては次のセクションで説明します。

Memcached を使用するためのいくつかのヒント

Memcached を使用してパフォーマンスと信頼性を向上させるためのいくつかのヒントを次に示します:

    Memcached をロック システムとして使用する
同時リクエストが同時に共有リソースにアクセスすると、競合状態が発生する可能性があります。この場合、Memcached を分散ロック システムとして使用して、同時リクエストの競合を回避できます。たとえば、カウンターを更新したい場合、Memcached をロック システムとして使用できます。

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

//以自增方式计数
$key = "counter";
$counter = $memcached->increment($key);

//获取计数器结果
echo "Counter: ".$counter;
?>

上の例では、Memcached オブジェクトを使用して Memcached サーバーに接続し、

increment() 関数を使用してカウンタ値を 1 ずつインクリメントしました。これにより、複数の同時リクエストによるカウンターの競合が回避されます。

    オプションと有効期限の利用
Memcached はデータを保存するだけでなく、追加のオプションを使用してキャッシュされたデータの動作を制御することもできます。有効期限オプションを使用すると、各キーと値のペアを保存する期間を決定できるため、キャッシュのローテーションが高速化されます。

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

//设置过期时间
$memcached->set("key1", "value1", 3600);

//获取具有过期时间的键值对
$value = $memcached->get("key1");

//除了过期时间之外,可以使用其他选项
$memcached->set("key1", "value1", 3600, 0);
$memcached->set("key1", "value1", 0, 100);
?>

上の例では、まず

set() 関数を使用してキーと値のペアを保存し、有効期限を設定します。次に、get() 関数を使用して、このキーと値のペアを取得します。キャッシュ内のデータの有効期限が切れている場合は、null 値が返されます。

    Memcached のスケーラビリティの活用
Memcached の設計目標の 1 つは、そのスケーラビリティです。これは、Memcached サービスを内部クラスターに埋め込み、複数のコンピューターを利用してキャッシュ サービスを同時に提供することによって実現されます。

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServers(array(
   array("server1", 11211, 33),
   array("server2", 11211)
));

//保存数据到Memcached服务器
$memcached->set("key1", "value1");

//从Memcached服务器获取数据
$value = $memcached->get("key1");
?>

上の例では、

addServers() 関数を使用して複数の Memcached サーバーをセットアップし、リクエストを複数のサーバーに分散します。次に、set() 関数と get() 関数を使用して、サーバーにデータを保存および取得します。この分散メカニズムは、Memcached の最も強力なスケーラビリティ メカニズムの 1 つです。

結論

Memcached は、動的 Web アプリケーションを高速化するために使用できる高性能のメモリ内オブジェクト キャッシュ システムです。 PHP 拡張機能を使用すると、PHP アプリケーションを Memcached に簡単に統合でき、アプリケーションのパフォーマンスとスケーラビリティが向上します。 Memcached のいくつかのテクニックを使用すると、Memcached サービスをより効果的に使用し、アプリケーションのパフォーマンスと信頼性を向上させることができます。

以上がPHP と Memcached の統合と使用の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。