ホームページ  >  記事  >  バックエンド開発  >  PHP 開発キャッシュの原理と適用シナリオ

PHP 開発キャッシュの原理と適用シナリオ

WBOY
WBOYオリジナル
2023-11-08 13:26:001400ブラウズ

PHP 開発キャッシュの原理と適用シナリオ

PHP 開発キャッシュの原理とアプリケーション シナリオには、特定のコード サンプルが必要です

インターネット テクノロジの発展に伴い、PHP は広く使用される開発言語の 1 つになりました。 PHP 開発では、キャッシュの使用が一般的な最適化テクノロジであり、データベース クエリの数を減らし、応答時間を短縮し、アプリケーションのパフォーマンスを向上させることができます。

キャッシュ原理

キャッシュは、データをメモリに保存し、ディスクやデータベースなどの外部ストレージへのアクセスを減らし、それによってアプリケーションのパフォーマンスを向上させるテクノロジーです。

キャッシュの基本原理は、外部ストレージ (データベースやファイル システムなど) からデータを読み取り、メモリに保存することです。次回データが必要になったときは、メモリから直接読み取ることができるため、ディスクやデータベースでの頻繁な IO 操作が回避されます。

メモリの読み取りおよび書き込み速度は、ディスクやデータベースなどのストレージ デバイスの速度よりもはるかに速いため、キャッシュ テクノロジを使用すると、アクセス速度と応答時​​間を大幅に改善できます。

アプリケーション シナリオ

実際のアプリケーションでは、キャッシュを使用して大量のデータを読み取り、クエリを繰り返すことができます。これにより、応答速度が大幅に向上し、待ち時間が短縮されます。いくつかの代表的なアプリケーション シナリオを以下に紹介します。

1. 人気のあるデータのキャッシュ

人気のあるデータとは、Web サイトのトップページやカテゴリ ページなど、頻繁にクエリされるデータを指します。これらのデータは通常、あまり変化せず、頻繁にクエリされます。したがって、メモリにキャッシュすると、データベースのクエリ時間とネットワーク IO 時間を大幅に節約できます。

たとえば、次はキャッシュを介して人気のあるサイトにクエリを実行する PHP コードの例です。

function getPopularSites() {
    // 先尝试从缓存中读取数据
    $cache = new Memcache();
    $cache->connect('localhost', 11211);
    $data = $cache->get('popular_sites');

    if (empty($data)) {
        // 如果没有缓存,则从数据库中查询数据
        $conn = new mysqli('localhost', 'user', 'password', 'my_db');
        $result = $conn->query('SELECT * FROM sites WHERE visits > 1000');
        $data = $result->fetch_all(MYSQLI_ASSOC);

        // 将数据存储到缓存中
        $cache->set('popular_sites', $data, 0, 3600);
    }

    return $data;
}

関数はまずキャッシュからデータを読み取ろうとし、データが読み取れない場合は、キャッシュに保存し、次にデータベースからデータをクエリしてキャッシュに保存します。キャッシュの有効期限は 3600 秒に設定されており、有効期限が切れると、データはデータベースから再クエリされます。

2. セッション データのキャッシュ

PHP アプリケーションでは、セッション データ (Session) はサーバー側に保存されているユーザー データであり、サーバーはユーザー データが要求されるたびにディスクから読み込む必要があります。 . .アプリケーションに多数のユーザーがいる場合、セッション データのクエリがサーバーのパフォーマンスのボトルネックになります。

セッション データの読み取りを高速化するために、Memcache などのキャッシュ ツールを使用してセッション データをメモリにキャッシュし、リクエストのたびにセッション データをメモリから読み取ることができます。毎回メモリから読み取る必要がなく、ディスク上でクエリが作成されます。

たとえば、次は Memcache を使用してセッション データをキャッシュする PHP コードの例です:

session_start();

function getSessionData($key) {
    // 先尝试从缓存中读取数据
    $cache = new Memcache();
    $cache->connect('localhost', 11211);
    $data = $cache->get(session_id() . '_' . $key);

    if (empty($data)) {
        // 如果缓存中没有该数据,则从会话中读取
        $data = $_SESSION[$key];

        // 将数据存储到缓存中
        $cache->set(session_id() . '_' . $key, $data, 0, 3600);
    }

    return $data;
}

function setSessionData($key, $value) {
    // 将数据存储到缓存和会话中
    $cache = new Memcache();
    $cache->connect('localhost', 11211);
    $cache->set(session_id() . '_' . $key, $value, 0, 3600);
    $_SESSION[$key] = $value;
}

上記のコードでは、session_id() と $key をキャッシュ キー値として使用します。キャッシュにデータがない場合は、$_SESSION 配列から読み取ってキャッシュに保存します。データが変更されると、キャッシュと $_SESSION 配列内のデータも同時に更新されます。

3. データ計算結果のキャッシュ

頻繁な計算が必要な一部のアプリケーションでは、計算の繰り返しを避けるために計算結果をキャッシュできます。たとえば、ページング データ、商品価格の計算などです。これらの計算は比較的複雑ですが、実際の使用では、同じ入力パラメータが異なる期間で繰り返し計算される可能性が高いため、キャッシュ テクノロジを使用すると、計算の効率が大幅に向上します。計算。

たとえば、APC キャッシュを使用して乗算結果を計算する PHP コードの例を次に示します:

function multiply($a, $b) {
    // 先尝试从缓存中读取乘法结果
    $result = apc_fetch(sprintf('multiply_%d_%d', $a, $b), $success);

    if (!$success) {
        // 如果缓存中没有结果,则进行乘法计算
        $result = $a * $b;

        // 将计算结果存储到缓存中
        apc_add(sprintf('multiply_%d_%d', $a, $b), $result, 3600);
    }

    return $result;
}

この関数は、呼び出しパラメーター $a および $b をキー値としてキャッシュします。キャッシュにデータがない場合は、乗算計算が実行され、計算結果がキャッシュに格納されます。関数が呼び出されるたびに、二重計算を避けるためにキャッシュから結果を読み取ろうとします。

概要

キャッシュは、アプリケーションのパフォーマンスと応答速度を大幅に向上させることができる、シンプルで効果的な最適化手法です。 PHP 開発では、キャッシュ テクノロジを適切に使用すると、データベース クエリの数が減り、応答時間が短縮され、ユーザー エクスペリエンスが向上します。

実際のアプリケーションでは、Memcache、APC、その他のメモリ キャッシュ ツールなど、ビジネス ニーズに応じてさまざまなキャッシュ ツールやキャッシュ戦略を選択して、一般的なデータ、セッション データ、計算結果などをキャッシュすることでアプリケーションのパフォーマンスを最適化できます。 。 目的。

上記は、PHP 開発キャッシュの原理とアプリケーション シナリオの紹介であり、PHP 開発者に役立つことを期待して、いくつかの具体的なコード例も提供しています。

以上がPHP 開発キャッシュの原理と適用シナリオの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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