キャッシュは多くの Web サイトで使用されており、特に高い同時実行性を扱う場合、キャッシュは不可欠です。この記事は、phalapi に基づいてキャッシュされた Redis の実際の使用法を説明するものであり、皆様のお役に立てれば幸いです。
前書き
プロジェクトを開発していると、メッセージのプッシュ、電子メールの送信、テキスト メッセージの送信、同時実行エラーなど、多くの問題が発生することがあります。このとき、一般的に使用されるキャッシュが私たちを救ってくれます。 、実際の問題を解決するための Redis のキャッシュの実際の使用方法について説明します。このセクションを読む前に、Redis に基づいた基本的な知識と、PhalApi の Redis 拡張ドキュメントを簡単に見てみましょう。解決する
テクノロジーを使用するときは、もちろん問題を解決するために使用します。では、キャッシュ テクノロジー Redis を使用すると、具体的にどのような問題を解決できるでしょうか?
//从缓存redis的clubcache库中查询club表where条件是city,city值是$city $cache = DI()->redis->get_Time('club'.'city'.$city,'clubcache'); //如果查询到了就直接返回缓存的结果 if($cache){ return $cache; } //如果不存在从数据库里面获取结果然后存入redis缓存key的条件和取值时一样,最后一个参数为过期时间 $rs = $this->getORM()->select('*')->where('city',$city)->fetchAll(); DI()->redis->set_Time('club'.'city'.$city,$rs,'clubcache',600);上記で行うことは、結果を 600 秒間保存することです。600 秒以内に再度クエリを実行すると、同じ結果が得られます1.2 キュー処理 時間のより重要な機能の 1 つは、その時間です。キューまず、いくつかの特別な Redis 関数を見てみましょう
//写入队列左边 set_lPush //写入队列左边 如果value已经存在,则不添加 set_lPushx //写入队列右边 set_rPush //写入队列右边 如果value已经存在,则不添加 set_rPushx //读取队列左边 get_lPop //读取队列右边 get_rPop //读取队列左边 如果没有读取到阻塞一定时间 get_blPop //读取队列右边 如果没有读取到阻塞一定时间 get_brPopたとえば、メッセージ プッシュ、電子メールの送信、テキスト メッセージの送信などのビジネスを行う場合、最初のリクエストを行う必要があります。サードパーティ インターフェイスの場合は、リクエストたとえば、WeChat のプッシュ インターフェイスが 200 ミリ秒である場合、この種の問題の解決策は、ユーザーのアクセス速度が大幅に低下することです。キューの処理は以下の通りです ユーザーのプッシュリクエストを受信したら ↓ 何も操作せずにキューAPIにプッシュリクエストを追加(左側に追加するなど) 読み込みキューに(右側の読み込みが最後) in last out、左側を読む場合は先入れ先出しです) ↓ 次に、応答プッシュ ロジックを実行します 一般に、スクリプトは無限ループまたはシェル タイミング リクエストであり、ブロックは、値に到達できない場合のループが速すぎる問題を解決するには、データを読み取ることができません1.3 一時データストレージ一時データについては多くの説明は必要ありません。例で十分ですたとえば、検証コードを取得した場合、検証コードをデータベースに保存する必要がありますか? 必要ないと思いますが、データベースは期限切れの操作を実行するのが簡単ではありません。自分で判断するしかありません 次に、redisを使用して検証コードをredisに保存します。有効期限はこの問題を非常によく解決します1.4 データベース Redis をデータベースとして使用することは、比較的詳細な使用方法です サービスは分散できますが、ほとんどのデータベースでは可能です。分散されていないため、多くのシステムが結合されてデータベースに蓄積されます。もちろん、キャッシュを使用して結果セットを保存することもできますが、このソリューションは便利であり、問題を解決します。根本的な原因は、子供用の靴について話し合ったときに、redis をメタデータ データベースとして使用するという便利な解決策を思いつきました。最初のデータベース mysql はメタデータ データベースとして使用されますこの操作を実行すると、サーバーはホット データを自動的に同期します。 redisを利用してコールドデータをmysqlに保存する コールドデータを利用する場合、基本的にユーザーの操作のほとんどはredisをベースとした操作となるため、実装コストが比較的高いと考えられます。 Redis データ同期のカプセル化の実装、where クエリの使用などに多大なエネルギーが必要です。後の段階で、作者は一般的な拡張を行う予定です
2。実際、上記のカテゴリは、キャッシュはデータベースとは異なり、すべてのデータが蓄積されていると非常に面倒になります。 redisのライブラリ
しかし、redisは複数のライブラリをサポートしているため、それを分割するための仕様が必要です。ここで私がそれらをどのように使用するかを共有します
0〜10のライブラリは、通常のビジネスライブラリ、つまりpush Queueとして使用されます。 、一時データ、各データベースには 1 つのビジネスのデータのみが保存されます。たとえば、WeChat プッシュ データは 5 つのデータベースに存在し、確認コードを送信するための一時データは 3 つのデータベースに保存されます。 10 個のライブラリでは足りないと思われる場合は、ビジネスに応じてさらに追加できます
10 個を超えるライブラリは、各テーブルの結果セット データやその他のデータを保存するキャッシュ ライブラリとして使用されます
すべてのキーの命名規則タイプ + テーブル名 + 条件を含める必要があります
php ファイル キャッシュ クラスの使用例分析
PHP キャッシュ メカニズム
ディスクラスター障害
以上がphalapi キャッシュの使用と Redis の拡張の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。