ホームページ >バックエンド開発 >PHPチュートリアル >キャッシュの使い方、キャッシュ利用_PHPチュートリアル

キャッシュの使い方、キャッシュ利用_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:08:331127ブラウズ

キャッシュの使用、キャッシュの使用

キャッシュはアクセス速度を向上させる強力なツールです。作業で主に使用されるのは memcache と redis で、練習中にコンピュータにインストールされる Apache に似た B/S ソフトウェアです。また、ポートをリッスンし、クライアント上で直接入力することもできます (Telnet 経由で Memcache を操作するなど)。対応するコマンドを使用して値にアクセスします。自習中に、この方法でネイティブ コマンドに慣れ、その効果を確認できます。これらはメモリ上に常駐し、データを取得後にメモリに書き込み(ソフトウェアのインストール後にメモリ領域を占有します)、データの有効期限を設定し、使用時にメモリから直接読み取ります。 、アクセス速度が桁違いに向上します。 lz Zeng Jin は、キャッシュをまったく必要としない非常にシンプルなバックエンドを作成しました。その速度を見たとき、私は思わず唸ってしまいました。これほど遅いのに、どうして Web ページと呼べるのでしょうか。 !しかし、当時私は若くて無知で、キャッシングの使い方を知りませんでした。もちろん、フロントエンドの女の子がその時心の中で密かに悪態をついていなければ良いのですが。>3

memcache の使用は、少なくともコマンドの観点からは比較的簡単です。 memcache では、保存方法は key->value であり、key-value に対応する保存方法は結合配列の要素形式に似ており、保存できる型は数値、文字列、配列、オブジェクトなどです。非文字列タイプ (数字は数値文字列と見なすことができます) は、まず JSON でエンコードまたはシリアル化されてから、取り出されるときにデコードまたは逆シリアル化されてキャッシュに保存されます。 Memcache は、memcache キャッシュの処理に特化した PHP クラスです。カプセル化された主なメソッドは、get、set、delete、flush、connect、close です。つまり、必要なキャッシュの取得、設定、削除、クリア、接続、およびクローズです。 。 (括弧内は転送可能なパラメータを示します)

ゲットキー、[フラグ]サーバーから 1 つまたはいくつかの要素を取得します削除キー、[タイムアウト]指定されたタイムアウト以内にキーに対応する要素を削除し、デフォルトのタイムアウトは 0 ですぐに削除しますフラッシュなしすべての要素をクリア、削除します接続ホスト、[ポート]、[タイムアウト]memcache サーバー ホストのポート port に接続します。スクリプトの実行後に自動的に閉じられます。または、アクティブに閉じることもできます。 閉じるセット交換増分キー、[値]キーが key の要素に値を追加します。値のデフォルトは 1 ですが、元の値が変更される場合があります減少キー、[値]キーが key である要素の値を減らします。値のデフォルトは 1 ですが、元の値は変更される可能性があります。 ホスト、[ポート]、[永続的]、[重み]、[タイムアウト]、...ホスト、[ポート]、[タイムアウト]

注意すべき点がいくつかあります:

1. set と replace の使用法の違い: set は、接続の失敗やメモリ不足などの重大な理由がない限り、ほとんどの場合に成功します。Replace は、キーが存在しない場合にのみ失敗します。

2. connect メソッドによって確立された接続は、スクリプトの実行終了後に切断されるか、close() メソッドを呼び出すことによって切断されます。

3. インクリメントまたはデクリメントメソッドで得られる数値は常に 0 以上です。計算後に得られた値が実際に 0 未満の場合は、たとえば 32 で 4 バイトを占める int 型に変換されます。ビットの場合、戻り値は (2

32-1) で、計算後に 0 以上の場合は直接返され、要素の型が非数値 (または数値文字列) の場合は返されます。最初に数値に変換されてから計算されます

4. 新しい Memcache オブジェクトを作成して接続する場合、2 つの方法があります: $mem =new Memcache; $mem->connect('127.0.0.1', 11211); : $mem->addServer('127.0.0.1', 11211); 後者は、Memcache サーバー接続を既存の接続プールに追加することによって確立され、同じ効果が得られます。

強力なキャッシュ ツールである Redis は、国内のポータルで広く使用されているおかげで継続的に改良されており、現在は安定したバージョンになっています (私が作業している Microsoft github では、最新の 64 ビット リリース 2.8 バージョンのようです)。マシン上で実行...)、開発としては memcache 以外にも多くのメソッドがあり、主にデータ アクセスに使用されますが、他のもの、通信プロトコル、クラスターは一般にバックグラウンドで開発され、速度は追求されません。 . 極端な場合、基本的には役に立ちません。 Redisは操作に応じて以下の種類に分かれます:

1. 文字列: これはキーと値のペアでもあり、主にそのキーに対応する要素に対して get、set、length、auto-increment などの操作を実行します。Redis は追加されたすべての型を、純粋な数値も含めて文字列として保存します。

2. ハッシュ:ハッシュテーブル(ハッシュテーブル)は、特定のハッシュアルゴリズムを使用したデータ構造の辞書です。たとえば、携帯電話のアドレス帳には数百人の名前があり、姓の最初の文字が使用されます。ソートするキーコードとして使用するため、文字と名前を関連付ける特定のマッピング方法を通じて連絡先をすばやく見つけることができます。 Redis では、ハッシュ テーブルを作成するときに、最初にテーブル名とそれを格納するテーブルを指定し、次にフィールド (フィールド、実際には変数) とそれに対応する値を指定します。cmd の操作は次のとおりです (「The.ハッシュ テーブル hash1 には、ドメイン ユーザー名に対応する値 Jack が格納され、redis はユーザー名から Jack へのマッピングを自動的に確立します。複数のドメインと対応する変数をハッシュ テーブルに格納できます。

3. リスト: リストは、データ構造に相当するリンク リストに似ており、スタックやキューも実装できます。前の文字列 (名前は非常に奇妙なものです) は、1 対 1 の対応で単一のキーと値のペアを格納します。 、複数のValue(キーなし)を格納します。ポイントは、リスト構造として、変数値を左右(先頭と末尾)から挿入およびポップアップし、長さを求め、一連の操作を実行できることです。これが、lpush、rpush の下でリストと呼ばれる理由です。コマンドは、テーブルの左側と右側から変数 hello と world を挿入することです。

4. Set: 名前が示すように、セットは複数の変数値 (キーなし) を格納することもできますが、たとえば、セット内の要素は繰り返されないため、数学的に定義されたセットの特性に準拠します。セット内の各データ ペアのキー名も異なります。また、結合、交差、差分などの演算も実行できます (次のコマンドは、セット mySet に値 var を追加します)。

5. SortedSet: Set の特別な方法と見なすことができる順序セット。各 SortedSet タイプのセットでは、(キーなしで) 値を追加するときに、スコアと呼ばれる変数値をそれらに割り当てる必要があります。順序どおりであるかどうかを判断するフィールドが必要です。次のコマンドは順序付きセット stset を作成し、値 google.com を追加します。そのスコアは 10 です。実際、これは順序セットと呼ばれ、スコアが与えられているため、これを使用して特定の並べ替え操作を実行できることは基本的に確実であり、これも当てはまります

;

6. Key: キー単独での操作はもちろん、キーに対応する要素のデータ型の表示、キーに対応する要素の生存時間の表示、生存期間のリセットなど、対応する要素の値にも影響します。時刻、すべてのキーを返し、関連情報を通常の形式で表示します。キー名、削除キー (要素も削除されます) など。実際、Redis はハッシュ テーブル名、リスト テーブル名、およびセット名をキーとして参照し、セットまたはテーブル全体がその値です。以下は、格納される値のタイプを確認するための type コマンドです。List リストが格納されます。

リファレンスドキュメントを見つけて上記のコマンドを実行すれば、すぐに慣れることができます。ここでは一般的な内容についてのみ説明します。では、実際のプロジェクトではキャッシュは通常どのように使用されるのでしょうか? Weibo のキャッシュ設計などの全体像については説明しません。これには、ある程度のアクセス数があるバックエンドとして、速度を向上させるためにキャッシュを使用する必要があるとだけ言ってください。

重要な原則は (これまで何度も遭遇しましたが)、 に渡されたパラメーターを使用してキー名 を綴り、このキー名を使用して値 を保存および取得することです。たとえば、Model クラスには getUserInfoByUid($params) というメソッドがあり、ユーザーの情報をクエリするための uid フィールドを含む配列を渡します。ここでは、キャッシュされたデータを取得できない場合に、最初にキャッシュが使用されます。 、データベースをチェックしてキャッシュに再度追加し、最後に結果データを返します。これもキャッシュを使用する一般的なプロセスです。

Memcache を例として、まずコードを見て、Cache クラスを定義します。

リーリー

次に、オペレーション データベース オペレーション クラスを定義します。

リーリー

一般的に、データは Model モデル クラスで読み書きされることが多いため、別の UserModel クラスを定義し、できるだけシンプルにするように努め、Model の可能なパブリック基本クラスを記述することはもうやめます。

リーリー

ここでは、ユーザーのuidを通じてユーザーの情報を取得したいのですが、クエリ条件はuidで、渡される必要なパラメータはuidです。本来、繰り返しのクエリを高速化するために各ユーザーのデータをキャッシュしたいので、キャッシュを定義するとき。キーがある場合は、uid の使用を検討できます。ただし、この uid を使用するだけでは十分ではありません。他のテーブルに uid に基づくクエリがある場合、キー名が重複してデータの混乱が生じるため、getUserInfoByUid メソッドを使用します。また、メソッド名を綴ることもできます。 UserModel クラスでは、定数cache_get_userinfo_uidが定義されており、最後の%sはパラメータuidを結合するためのものです。ただし、これはまだ機能しない可能性があります。現在、会社はこのテーブルを使用する別のプロジェクトを開始しています。結局のところ、このメソッドとまったく同じ名前の関数名が使用されています。キャッシュを使用する場合、通常、メンテナンスではサーバーを機能として個別に使用し、データはキャッシュ プールに書き込まれるのが通常です。このとき、プロジェクトにプレフィックスを追加することを検討できます。したがって、Cache クラスでは、このプロジェクト APP を呼び出すために定数プレフィックスが使用され、基本的に競合がないことが保証されます。もちろん、これがグループのサブプロジェクトであり、このグループに他のプロジェクトがあり、グループの名前が Star である場合は、プロジェクト グループ名を前に追加できます。

初めて読み取りキャッシュを実行すると (左側)、キャッシュは空ですが、出力されたキャッシュ キー名が表示されます。

キャッシュに2回目のデータがある(右側)のは、Cacheクラスのsetメソッドにキャッシュキー名を出力する場所を入れたためです。 2回目は接続せずに直接キャッシュデータを読み込んでいます。当然、キャッシュはリセットされないため、キャッシュ キーは出力されません。

キー名が競合しないようにするのに長い時間がかかりました。また、プロジェクト内でキャッシュを使用する方法も含まれています。

1. 結合できる現在のパラメータは 1 つだけです。名前や年齢などもある場合は、具体的には個人によって異なります。設定またはコード仕様

2. 現在のメソッド名にできるだけ近い名前がキャッシュキーの中央に綴られます。

3. 現在のプロジェクト名をプレフィックスとして使用します (オプション)。これがより安全です。

4. プロジェクトグループの名前が再び接頭辞として綴られます(通常は使用されません)。

そして、Modelクラスでまずキャッシュを取得し、取得できなかった場合はデータベースを読み込み、キャッシュへの書き込みを忘れずに行い、有効期限などを設定する、という処理です。 。

もちろん、もっと慎重に行うこともできます。たとえば、キャッシュされたデータを読み取った後、その有効期限を確認すると、5 秒で期限切れになることがわかり、次回の訪問時に取得できるように 3000 秒にリセットします。同時にデータベースが再度読み取られることがないように、頻繁にデータベースに接続すると非常に時間がかかります。

しかし、私は Redis が使いやすいと今でも思っています>-_- さて…もう遅いから寝ましょう〜=_=

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/950709.html技術記事キャッシュの使用、つまりキャッシュの使用は、アクセス速度を向上させる強力なツールです。作業で主に使用されるのは memcache と redis で、練習中にマシンにインストールされる Apache に似ています。
追加 キー、変数、[フラグ]、[有効期限] キーとしてキーを、値として var をサーバーに追加します。有効期限を指定できます。0 は有効期限が切れないことを意味し、最大 30 日間です。
なし memcache サーバー接続をアクティブに閉じますが、pconnect によって生成された接続は閉じません
キー、変数、[フラグ]、[有効期限] キーが key で値が var であるストレージ要素は、キーが存在する場合、その値は上書きされます。
キー、変数、[フラグ]、[有効期限] キーが key である要素を検索し、値 var に置き換えます。見つからない場合は、エラーが報告されます。
サーバーを追加
memcache サービスを接続プール (複数の memcache 接続が保存される場所) に追加します。つまり、ホストへの接続を確立します。ポートはポートです 接続
ホスト host 上にある memcache サーバーへの永続的な接続を確立します。ポートは、スクリプトの実行後、または close の呼び出し後に閉じることはできません。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。