ホームページ  >  記事  >  バックエンド開発  >  phalapi キャッシュの使用と Redis の拡張

phalapi キャッシュの使用と Redis の拡張

*文
*文オリジナル
2017-12-23 16:28:552058ブラウズ

キャッシュは多くの Web サイトで使用されており、特に高い同時実行性を扱う場合、キャッシュは不可欠です。この記事は、phalapi に基づいてキャッシュされた Redis の実際の使用法を説明するものであり、皆様のお役に立てれば幸いです。

前書き

プロジェクトを開発していると、メッセージのプッシュ、電子メールの送信、テキスト メッセージの送信、同時実行エラーなど、多くの問題が発生することがあります。このとき、一般的に使用されるキャッシュが私たちを救ってくれます。 、実際の問題を解決するための Redis のキャッシュの実際の使用方法について説明します。このセクションを読む前に、Redis に基づいた基本的な知識と、PhalApi の Redis 拡張ドキュメントを簡単に見てみましょう。解決する

テクノロジーを使用するときは、もちろん問題を解決するために使用します。では、キャッシュ テクノロジー Redis を使用すると、具体的にどのような問題を解決できるでしょうか?

1.1 結果セットのキャッシュ

以下に例を示します。キャッシュされた結果セットが何かを理解できるでしょう。見てからという意味です

//从缓存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 サイトの他の関連記事を参照してください。

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