ホームページ バックエンド開発 PHPチュートリアル マルチレベルキャッシュの実装---責任連鎖モデル

マルチレベルキャッシュの実装---責任連鎖モデル

Jul 25, 2016 am 09:06 AM

マルチレベルのキャッシュ責任連鎖モデル。
* クライアントはそれをハンドラーに送信し、ハンドラーはタスクを処理できる関数を責任チェーン内で見つけて処理します。これは次のように要約できます。 一連のクラスを使用してリクエストを処理しようとします。これらのクラス間の疎結合であり、共通点は、それらの間でリクエストを渡すということだけです。つまり、リクエストが届いた場合、クラス A がそれを最初に処理します。処理されない場合は、クラス C に渡されて処理されます。チェーン (連鎖) が渡されます。
  1. /**
  2. * 責任連鎖パターン。その目的は、メソッド呼び出しなどのリクエストを処理するためにオブジェクト チェーンを編成することです。
  3. *
  4. * 責任の連鎖の最も有名な例は、マルチレベル キャッシュです。
  5. * クライアントはそれをハンドラーに送信し、ハンドラーはタスクを処理できる関数を責任チェーン内で見つけて処理します
  6. * これは次のように要約できます: 一連のクラスを使用してリクエストを処理しようとします。これらのクラス間には疎結合があります
  7. * 共通しているのは、リクエストがそれらの間で受け渡されることです。つまり、リクエストが処理されなかった場合、クラス A が最初にそれを処理します。 * は処理のためにクラス B に渡され、処理されない場合はクラス C に渡されて処理されます。
  8. */
  9. /**
  10. * ハンドラーの抽象化。
  11. * ChainOfResponsibility の一部になりたいオブジェクトは、このインターフェイスを直接実装するか、
  12. * AbstractHandler からの継承を介して実装する必要があります。
  13. * インターフェイスまたは
  14. * は抽象処理クラスを継承します
  15. */
  16. interface KeyValueStore{
  17. /**
  18. * 値を取得します。
  19. * @param string $key
  20. * @returnmixed
  21. */
  22. public function get($key) ;
  23. }
  24. /**
  25. * ConcreteHandler が
  26. * キャッシュや取得の干渉に関心を持たない基本的な no-op 実装
  27. * リクエストを受信し、それを満たそうとし、失敗した場合は次のハンドラーに委譲します。
  28. */
  29. 抽象クラス AbstractKeyValueStore は KeyValueStore を実装します{
  30. protected $_nextHandler;
  31. public function get($key){
  32. return $this->_nextHandler->get($key);
  33. }
  34. }
  35. /**
  36. * 理想的には、チェーン内の最後の ConcreteHandler。少なくとも、
  37. * チェーンに挿入された場合、呼び出される最後のノードになります。
  38. * 理想的には、責任チェーン上の最後の具象処理クラスがチェーンに追加され、最後に呼び出されたノードです。
  39. */
  40. class SlowStore は KeyValueStore を実装します{
  41. /**
  42. * これは、データベースまたはフラット ファイルなど、やや遅いストアである可能性があります。
  43. */
  44. protected $_values;
  45. public function __construct(array $values = array()){
  46. $this ->_values = $values;
  47. }
  48. public function get($key){
  49. return $this->_values[$key];
  50. }
  51. }
  52. /**
  53. * 独自のキャッシュでキーを検索してキーのリクエストを処理する ConcreteHandler
  54. * キャッシュ ミスの場合は次のハンドラーに転送します。
  55. * キャッシュ ミスの場合は、次の処理オブジェクトに転送します
  56. */
  57. class InMemoryKeyValueStore は KeyValueStore を実装します{
  58. protected $_nextHandler;
  59. protected $_cached = array();
  60. public function __construct(KeyValueStore $nextHandler){
  61. $this->_nextHandler = $nextHandler;
  62. }
  63. protected function _load($key){
  64. if ( !isset($this->_cached[$key])) {
  65. $this->_cached[$key] = $this->_nextHandler->get($key);
  66. }
  67. }
  68. パブリック関数get($key){
  69. $this->_load($key);
  70. return $this->_cached[$key];
  71. }
  72. }
  73. /**
  74. * 要求を委任せずにリクエストを委任する ConcreteHandler
  75. *全然わかります。 HTML を生成するメソッドを定義したり、同様のユーザー インターフェイスの問題に対処したりすることで、自身を特殊化できるため、ユーザー インターフェイスでの使用が容易になる可能性があります
  76. *。一部のクライアントは、このオブジェクトを KeyValueStore のインスタンスとしてのみ認識します
  77. *リクエストをどのように満たすかは気にしませんが、他のもの
  78. * はそれをそのまま使用する可能性があります (クラスベースのアダプターと同様)。
  79. * ハンドラーのチェーンが存在することをクライアントは認識しません。
  80. * 不用关心调用の特定实现外部の具体的な処理プログラムの後には手間がかかります。
  81. */
  82. class FrontEnd extends AbstractKeyValueStore{
  83. public function __construct(KeyValueStore $nextHandler){
  84. $this->_nextHandler = $nextHandler;
  85. }
  86. public function getEscaped($key){
  87. return htmlentities($this-> get($key), ENT_NOQUOTES, 'UTF-8');
  88. }
  89. }
  90. // クライアント コード
  91. $store = new SlowStore(
  92. array(
  93. 'pd' => 'フィリップ K. ディック',
  94. ' ia' => 'アイザック・アシモフ',
  95. 'ac' => 'アーサー・C・クラーク',
  96. 'hh' => 'ヘルムート・ヘイ.enbttel'
  97. )
  98. );
  99. // 開発中はスキップしますキャッシュし、$store を直接 FrontEnd に渡します
  100. $cache = new InMemoryKeyValueStore($store);
  101. $frontEnd = new FrontEnd($cache);
  102. echo $frontEnd->get('ia')。 "n";
  103. echo $frontEnd->getEscaped('hh')。 "n";
  104. /**
  105. * 期待: ...
  106. * Isaac Asimov
  107. * Helmut Hei.e​​nbttel
  108. *
  109. * 参加者:
  110. ◆クライアント (クライアント): ハンドラー (ハンドラー) にリクエストを送信します
  111. ◆ハンドラー (ハンドラー) 要約: を受け取ります。リクエストを受け取り、何らかの方法でそれを満たす;
  112. ◆ConcreteHandlers (コンクリート ハンドラー): リクエストを受け取り、それを満たそうとし、失敗した場合は次のハンドラーに委譲します。
  113. */
复制發


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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles