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_pass' => '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_pass'];
// 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.comtruehttp://www.bkjia.com/PHPjc/955978.html技術記事 Laravel の拡張 Memcached キャッシュ ドライバーは、Alibaba Cloud OCS キャッシュの使用を実装します。laravelmemcached Laravel は最近よく使っている PHP フレームワークで、使えば使うほど好きになるものがないので…。