Laravel で Memcached キャッシュドライバーを拡張し、Alibaba Cloud OCS キャッシュを使用して実装する、laravelmemcached_PHP チュートリアル

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

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

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 文字列 $driver
 * @param クロージャ $callback
 * @return IlluminateSupportManager|静的
 */
パブリック関数 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);

Return $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 = 新しい IlluminateCacheMemcachedStore($memcached, $prefix);

//Repository オブジェクトを作成して
を返す 新しい IlluminateCacheRepository($store) を返します;
});



設定を変更し、独自の拡張キャッシュドライバーを使用します
app/config/cache.php ファイルを開いて、以下を見つけます:


コードをコピーします

コードは次のとおりです: "driver" => "file", // デフォルトではファイルキャッシュを使用します

に変更されました:


コードをコピーします
コードは次のとおりです: "driver" => "saslMemcached", // 展開されて実装されたドライバーの名前

これで、Laravel に Alibaba Cloud ECS サーバー上の Alibaba Cloud OCS キャッシュ サービスを使用させることができます。 (前提として、PHP が Memcached 拡張機能をサポートし、SASL 認証が有効になっていることが前提となります。http://help.aliyun.com/doc/view/13553932.html
を参照してください。

http://www.bkjia.com/PHPjc/955978.html

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