ホームページ  >  記事  >  バックエンド開発  >  PHP で Redis キャッシュ テクノロジーを使用してデータベースの読み取りと書き込みを最適化する

PHP で Redis キャッシュ テクノロジーを使用してデータベースの読み取りと書き込みを最適化する

WBOY
WBOYオリジナル
2023-06-20 13:48:071283ブラウズ

インターネット技術の継続的な発展に伴い、データ量はますます増大し、データベースの読み書きの負荷も増大していますが、ユーザーエクスペリエンスは常に非常に高速な応答を維持する必要があります。時代が進むにつれ、キャッシュ技術が重要になります。特に重要です。この記事では、Redis キャッシュ テクノロジを使用して、PHP アプリケーションのデータベースの読み取りと書き込みを最適化する方法を紹介します。

1. Redis とは何ですか?

Redis は、単なるキーと値のストレージ システムです。他のキー/値ストレージ システムとは異なり、Redis は複数のデータ型 (文字列、リスト、セット、順序付きセット、ハッシュ テーブル) のデータ ストレージをサポートし、豊富な操作コマンドのセットを提供します。 Redis は、ディスクへのデータの永続化もサポートし、従来のキャッシュ システムを完全に置き換えることができるインメモリ ストレージ データベースです。

2. Redis を使用する理由は何ですか?

従来のアプリケーションの流れは、通常、アプリケーションがデータベースからデータを読み取り、そのデータを何らかの形式でユーザーに提示するというものです。このプロセスで最も時間がかかるのは、データベースからのデータの読み取りです。 Redis キャッシュは、データの一部をメモリにキャッシュするのに役立ちます。これにより、繰り返しの読み取りをキャッシュから直接取得できるようになり、データベースへの頻繁なクエリが回避され、データベースへの負荷が軽減され、読み取りと書き込みの効率が向上し、その結果、システムのコストと応答時間を短縮し、システム全体のスループットを向上させます。

3. PHP アプリケーションで Redis を使用するにはどうすればよいですか?

Redis を使用する前に、まず Redis をインストールする必要があります。 Redis のインストールと PHP 拡張機能のインストール プロセスについてはここでは詳しく説明しませんが、読者はすでに Redis と PHP 拡張機能をインストールしていることを前提としています。次に、PHP アプリケーションで Redis を使用する方法を紹介します。

  1. データ キャッシュ

アプリケーションでは、Redis の set コマンドと get コマンドを使用して、キャッシュされたデータを設定および取得できます。

//设置缓存
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);  //连接到Redis
$redis->set('name', 'redis cache'); //设置缓存
$redis->expire('name', 3600);       //设置过期时间

//获取缓存
$redis = new Redis();
$redis->connect('127.0.0.1', 6379); //连接到Redis
$name = $redis->get('name');         //获取缓存
if($name){                           //判断缓存是否存在
    echo $name;
}else{                               //不存在则从数据库中读取数据
    $name = 'get data from database';
    $redis->set('name', $name);
    $redis->expire('name', 3600);
    echo $name;
}

上記のコードでは、まずRedisにキャッシュデータがあるかどうかを判断し、あれば直接取得し、ない場合はデータベースから取得してキャッシュを設定し、有効期限を設定します。

  1. キャッシュされたデータのバッチ操作

複数のデータを一度にキャッシュする必要がある場合がありますが、Redis の multi コマンドと exec コマンドを使用すると、キャッシュされたデータをバッチ操作できます。

//批量设置缓存
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->multi();
$redis->set('name1', 'cache1');
$redis->set('name2', 'cache2');
$redis->set('name3', 'cache3');
$redis->exec();

//批量获取缓存
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->multi();
$redis->get('name1');
$redis->get('name2');
$redis->get('name3');
$result = $redis->exec();

上記のコードでは、multi コマンドと exec コマンドを使用して、キャッシュの設定または複数のキャッシュの取得という複数の操作を実行できます。

  1. キャッシュの読み取りと書き込みの分離

アプリケーションでは、ログイン ステータスなど、一部のデータ操作が頻繁に行われるため、高いデータ整合性は必要ありません。保存することを検討できます。これらのデータは Redis にキャッシュされ、ユーザー名、パスワード、電子メールなどのより重要なデータをデータベースに保存できます。この利点は、読み取りと書き込みの効率が向上し、キャッシュされたデータの変更によるデータベース データの不整合が発生しないことです。

//缓存数据
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('login:userid', '1');       //将登录状态存储到Redis中
$redis->expire('login:userid', 3600);

//读取数据
//先从Redis中读取
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$loginUserId = $redis->get('login:userid');
//如果Redis中不存在,则从数据库中读取
if(empty($loginUserId)){
    $sql = "select id from user where username='admin'";
    $result = $mysqli->query($sql)->fetch_assoc();
    $loginUserId = $result['id'];
    //将读取到的数据存储到Redis缓存中
    $redis->set('login:userid', $loginUserId);
    $redis->expire('login:userid', 3600);
}

上記のコードでは、ユーザーのログイン状態をRedisに保存していますが、読み込む際はまずRedisキャッシュから読み込み、Redis上に存在しない場合はデータベースから読み込みます。

4. 概要

Redis キャッシュ テクノロジを使用すると、PHP アプリケーションの読み取りおよび書き込みパフォーマンスが大幅に向上し、アプリケーションとデータベース間の分離が実現し、システムの応答時間が短縮され、ユーザー エクスペリエンスが向上します。 Redisキャッシュを利用する場合は、書き込みと読み込みの順序に注意し、キャッシュされたデータの有効期間を実情に合わせて設定する必要があります。同時実行性、分散、キャッシュ雪崩などが発生する状況では、キャッシュ システムの安定性と信頼性を確保するために、対応する運用および保守のテクノロジと方法を組み合わせる必要があることに注意してください。

以上がPHP で Redis キャッシュ テクノロジーを使用してデータベースの読み取りと書き込みを最適化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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