ホームページ > バックエンド開発 > PHPチュートリアル > Alibaba Cloud OCS を使用するために Laravel で Memcached キャッシュドライバーを拡張する_cache_PHP チュートリアル

Alibaba Cloud OCS を使用するために Laravel で Memcached キャッシュドライバーを拡張する_cache_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:07:40
オリジナル
1200 人が閲覧しました

Laravel の拡張 Memcached キャッシュ ドライバーは、Alibaba Cloud OCS キャッシュを使用して実装されます

この記事では、Alibaba Cloud OCS キャッシュを使用して実装される Laravel の拡張 Memcached キャッシュ ドライバーを主に紹介します。この記事では、SASL 認証をサポートする Memcached キャッシュ ドライバーを拡張します。友達が参照できることが必要なモードです

Laravel は私が最近よく使っている PHP フレームワークで、使えば使うほど気に入っています。下位互換性の歴史的な荷物がないため、完全にオブジェクト指向であり、Facades のエレガントな IoC Container 実装を使用しています。オープンソースコミュニティの優れたコンポーネントを簡単に導入して利用することができます。つまり、これはまさに「楽しくコーディングできる」「マスターレベルのPHP開発フレームワーク」です。

Laravel アプリを Alibaba Cloud にデプロイしようとしたときに、問題が発生しました。Laravel は Memcached キャッシュをサポートしており、Alibaba Cloud の OCS も Memcached キャッシュに基づいていますが、Alibaba Cloud OCS は SASL 認証を使用し、Laravel の Memcached ドライバーは使用しません。関連メソッドを実装する場合、サーバー上で PHP Memcached をコンパイルするときに SASL 認証オプションが有効になっている場合でも、ユーザー名とパスワードを設定する方法はありません。

Laravelではこの問題を解決する方法がたくさんあります。私は最も速くて最もトラブルのない方法を選択しました。それは、Laravel 独自の Memcached ドライバーを拡張し、Memcached オブジェクト自体の setSaslAuthData メソッドを通じてユーザー名とパスワードを指定することです。

背景知識

これは、IlluminateCacheCacheManager(IlluminateSupportManagerから継承)のextendメソッドを使用しています。まずこのメソッドの定義を見てみましょう:

コードは次のとおりです:

/**

* カスタムドライバー作成者を登録します。

*

* @param string $driver

* @param Closure $callback

* @return IlluminateSupportManager|static

  */

パブリック関数 extend($driver, Closure $callback){}

このメソッドは 2 つのパラメータを受け取ります。1 つ目はカスタム ドライバ名を表す文字列で、2 つ目はクロージャ コールバック関数です。この関数は、カスタム ドライバが呼び出されたときに実行されるメソッドです。 IlluminateCacheCacheManager のソース コードを読むと、ドライバーを作成する関数が IlluminateCacheRepository のインスタンスを返すことがわかります。IlluminateCacheRepository のコンストラクターは次のとおりです。

コードをコピーします。コードは次のとおりです:

/**

* 新しいキャッシュ リポジトリ インスタンスを作成します。

*

* @param IlluminateCacheStoreInterface $store

  */

パブリック関数 __construct(StoreInterface $store)

{

$this->store = $store;

}

Cache オブジェクトが実行できるメソッドを定義する IlluminateCacheStoreInterface インターフェイスを実装するオブジェクトが必要です。私の計画は元の Memcached キャッシュ ドライバーを拡張することなので、IlluminateCacheCacheManager のソース コードでは、Laravel が次のように Memcached ドライバーを作成することがわかります。

コードは次のとおりです:

/**

* Memcached キャッシュ ドライバーのインスタンスを作成します。

*

* @return IlluminateCacheMemcachedStore

  */

保護された関数 createMemcachedDriver()

{

$servers = $this->app['config']['cache.memcached'];

$memcached = $this->app['memcached.connector']->connect($servers);

$this->repository(new MemcachedStore($memcached, $this->getPrefix()));

を返す

}

最初に設定ファイルから定義した Memcached サーバーを読み取り、次に Memcached オブジェクトを作成します (IlluminateCacheMemcachedConnector によって実装され、実際には標準の Memcached オブジェクトを作成します)。その後、Memcached の addServer メソッドを呼び出して接続先のサーバーを指定し、その後 Instantiated を返します。 Memcached オブジェクト )

独自のキャッシュドライバーを拡張する

上記の背景知識を理解した後、独自のキャッシュ ドライバーを拡張できます。アイデアは次のとおりです:

1. app/config/cache.php ファイルに、「sasl認証を使用するかどうか」、「sasl認証アカウント」、「sasl認証パスワード」を設定する3つの設定項目を追加します。

2. bootstrap/start.php ファイルで、Cache::extend メソッドを呼び出してドライバーを拡張します。

3. app/config/cache.php ファイルで、ドライバー構成項目を変更し、システムが独自の拡張ドライバーを使用するように指定します。

設定項目を追加します

まず、app/config/cache.php ファイルを開いて、以下を見つけます:

コードは次のとおりです:

'memcached' => array(

array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),

)、

変更後の内容:

コードは次のとおりです:

'memcached' => array(

array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),

)、

'memcached_sasl' => 'true', // sasl認証を有効にする

'memcached_user' => 'your ocs username', // あなたの OCS ユーザー名

'memcached_pa​​ss' => 'your ocs password', // あなたの OCS パスワード

拡張ドライバー

次に、bootstrap/start.php ファイルを開き、最後の行 return $app;: の前にコードを挿入します。

コードは次のとおりです:

// システム独自の Memcached キャッシュ ドライバーに基づいて、saslMemcached という名前のキャッシュ ドライバーを拡張します

Cache::extend('saslMemcached', function($app){

// Memcached サーバーの設定を設定ファイルから読み取ります

$servers = $app['config']['cache.memcached'];

// IlluminateCacheMemcachedConnector クラスを使用して、新しい Memcached オブジェクトを作成します

$memcached = $app['memcached.connector']->connect($servers);

// サーバー上の PHP Memcached 拡張機能が SASL 認証をサポートしている場合

if(ini_get('memcached.use_sasl')){

// 設定ファイルからsasl認証ユーザー名を読み取ります

$user = $app['config']['cache.memcached_user'];

// 設定ファイルからsasl認証パスワードを読み取ります

$pass = $app['config']['cache.memcached_pa​​ss'];

// Memcached 圧縮を無効にする (これは Alibaba Cloud のドキュメントで行われます...)

$memcached->setOption(Memcached::OPT_COMPRESSION, false);

//バイナリプロトコルを使用するように Memcached を指定します (sasl 認証要件)

$memcached->setOption(Memcached::OPT_BINARY_PROTOCOL, true);

//sasl認証に使用するアカウントのパスワードを指定します

$memcached->setSaslAuthData($user, $pass);

}

// 設定ファイルからキャッシュプレフィックスを読み取ります

$prefix = $app['config']['cache.prefix'];

// MemcachedStore オブジェクトを作成します

$store = new IlluminateCacheMemcachedStore($memcached, $prefix);

// Repository オブジェクトを作成して返す

新しい IlluminateCacheRepository($store) を返します;

});

設定を変更し、独自の拡張キャッシュドライバーを使用します

app/config/cache.php ファイルを開いて、以下を見つけます:

コードは次のとおりです:

"driver" => "file", // デフォルトではファイルキャッシュを使用します

変更後の内容:

コードは次のとおりです:

"driver" => "saslMemcached", // 展開して実装しただけのドライバー名です

これで、Laravel に Alibaba Cloud ECS サーバー上の Alibaba Cloud OCS キャッシュ サービスを使用させることができます。 (

http://www.bkjia.com/PHPjc/955830.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/955830.html技術記事 Laravel での拡張 Memcached キャッシュ ドライバーの実装では、Alibaba Cloud OCS キャッシュを使用します。この記事では、主に Laravel での拡張 Memcached キャッシュ ドライバーの実装について説明し、Alibaba Cloud OCS キャッシュを使用します。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート