Alibaba Cloud ACE キャッシュ サービスは、Laravel フレームワーク、laravel Ali に実装されています
以前、Laravel 4 フレームワークでの Alibaba Cloud OCS キャッシュの使用に関する記事を書きました。この記事では、SASL 認証を必要とする Alibaba Cloud OCS キャッシュ サービスをサポートするように Laravel 4 を拡張する方法を紹介しました。何人かのネチズンが、Laravel 4 で ACE のキャッシュを使用する方法を私に尋ねました。当初は同じ方法を使用する必要があると考えていましたが、実際に試してみると、ACE のキャッシュは大きく異なることがわかりました。そこで、Laravel フレームワークで Alibaba Cloud ACE のキャッシュ サービスを使用する方法を紹介する別の記事を書きます。
Laravelのキャッシュドライバーを拡張する方法
Laravel 4 で Cache::get($key)、Cache::put($key, $value, $ minutes) のようなコードを使用する場合、実際にはインスタンス化された IlluminateCacheRepository にアクセスするため、メソッドが拡張されるときに Cache::extend を渡します。カスタム キャッシュ ドライバーの場合、IlluminateCacheRepository オブジェクトも返す必要があります。
Laravel 4 の組み込み Memcached キャッシュドライバーの実装プロセスは次のとおりです:
1.標準Memcachedクラスの新しいオブジェクトを作成します
2. 前の手順で作成した Memcached オブジェクトを使用して、IlluminateCacheStoreInterface インターフェイスを実装する IlluminateCacheMemecachedStore オブジェクトを作成します。
3. 前の手順で作成した MemcachedStore オブジェクトを使用して、IlluminateCacheRepository オブジェクトを作成します。
そのため、カスタム キャッシュ ドライバーを拡張するときは、上記の手順のいずれかを選択して独自の状況に応じてカスタマイズし、最終的に IlluminateCacheRepository オブジェクトを返します。たとえば、前の記事では、最初のステップで、標準 Memcached オブジェクトを作成した後、setSaslAuthData() メソッドを通じて OCS に必要なユーザー名とパスワードを設定しました。後続の手順 2 と 3 をカスタマイズする必要はありません。
ACEのキャッシングサービス
Alibaba Cloud ACE のキャッシュ サービスはデフォルトの OCS とは異なります:
1. Alibaba::Cache() メソッドを通じて Cache オブジェクトを取得します。
2.ACE の Cache オブジェクトは標準の Memcached オブジェクトとは異なり、限定されたメソッドをサポートします。
つまり、今回最初のステップで取得するものは標準の Memcached オブジェクトではないため、IlluminateCacheMemcachedStore オブジェクトを作成することはできません。 IlluminateCacheStoreInterface インターフェイスを自分で実装する必要があります。
コンソールでキャッシュスペースが作成されると、一意の「キャッシュスペース名」が作成され、Alibaba::Cache('キャッシュスペース名') を通じてキャッシュオブジェクトが取得されます。 ACE キャッシュ サービス ドライバーを実装する手順は次のとおりです:
1. 変更を容易にするために、設定ファイル app/config/cache.php に ace という名前のキーを追加して、キャッシュスペース名を保存しました。
2. 次に、IlluminateCacheStoreInterface インターフェイスを実装する AceMemcachedStore クラスを作成します。
3. 最後に、AceMemcachedStore オブジェクトを使用して IlluminateCacheRepository オブジェクトを作成します。
具体的なコード実装を見てみましょう:
カスタム ACE キャッシュ ドライバーを実装するためのコーディング:
最初のステップは、設定ファイルを変更することです。 app/config/cache.php を開き、最後に次の行を追加します:
コードをコピーします コードは次のとおりです:
//キャッシュスペース名を指定
'ace' => 'lblog-cache',
2 番目のステップは、便宜上、独自のクラス ファイルを src/Ace ディレクトリに置き、Ace を名前空間として使用することです。
1.アプリと同じレベルのディレクトリにディレクトリsrc/Aceを作成します。
2.composer.json ファイルを開き、autoload セクションを変更し、クラスマップの下で psr-0 または psr-4 を使用してファイルを自動的にロードします。
コードをコピーします コードは次のとおりです:
「自動ロード」: {
「クラスマップ」: [
// オートロードクラス
]、
「psr-4」: {
"Ace\": "src/Ace"
}
}、
次のコードを使用して src/Ace/AceMemcachedStore.php ファイルを作成します:
コードをコピーします コードは次のとおりです:
名前空間 Ace;
IlluminateCacheStoreInterface を使用します;
IlluminateCacheTaggableStore を使用します;
class AceMemcachedStore extends TuggableStore 実装 StoreInterface {
保護された $memcached;
保護された $prefix;
パブリック関数 __construct($space, $prefix = '') {
$this->memcached = Alibaba::Cache($space);
$this->prefix = strlen($prefix) > 0 ? $prefix.':' : '';
}
/**
* キーを使用してキャッシュからアイテムを取得します。
*
* @param 文字列 $key
* @return 混合
*/
パブリック関数 get($key)
{
$value = $this->memcached->get($this->prefix.$key);
if(is_bool($value) && $value === false) {
null を返す;
}
$value を返します;
}
/**
* アイテムを指定された時間分キャッシュに保存します。
*
* @param 文字列 $key
* @param 混合 $value
* @param int $ minutes
* @return boolean
*/
パブリック関数 put($key, $value, $ minutes)
{
return $this->memcached->set($this->prefix.$key, $value, $ minutes);
}
/**
* キャッシュ内のアイテムの値を増やします。
*
* @param 文字列 $key
* @param 混合 $value
* @return boolean
*/
パブリック関数インクリメント($key, $value = 1)
{
return $this->memcached->increment($this->prefix.$key, $value);
}
/**
* キャッシュ内のアイテムの値をデクリメントします。
*
* @param 文字列 $key
* @param 混合 $value
* @return boolean
*/
パブリック関数デクリメント($key, $value = 1)
{
return $this->memcached->decrement($this->prefix.$key, $value);
}
/**
* アイテムをキャッシュに無期限に保存します。
*
* @param 文字列 $key
* @param 混合 $value
* @return boolean
*/
パブリック関数永遠($key, $value)
{
return $this->memcached->set($key, $value, 0);
}
/**
* キャッシュからアイテムを削除します。
*
* @param 文字列 $key
* @return boolean
*/
パブリック関数忘れ($key)
{
return $this->memcached->delete($this->prefix.$key);
}
/**
* キャッシュからすべてのアイテムを削除します。
*
* @return void
*/
パブリック関数 flash()
{
//$this->memcached->flush();
false を返します;
}
パブリック関数 getMemcached()
{
return $this->memcached;
}
/**
* キャッシュキーのプレフィックスを取得します。
*
* @戻り文字列
*/
パブリック関数 getPrefix()
{
return $this->prefix;
}
}
このコードは比較的単純ですが、get($key) メソッドの実装には特別な注意を払う必要があります。標準のmemcachedおよびACEキャッシュオブジェクトのgetメソッドは、キーが有効な場合は対応するキャッシュ値を返しますが、Laravel4ではgetメソッドがnullを返すかどうかで判断するため、ここで処理する必要があります。 . キャッシュされた値または null を返します。
AceMemcachedStore クラスが作成されました。次に、bootstrap/start.php ファイルで Cache を拡張します。
bootstrap/start.php を開き、次のコードを追加します:
コードをコピーします コードは次のとおりです:
// 拡張機能 ace を持つキャッシュドライバー
Cache::extend('ace', function($app)
{
// app/config/cache.php ファイルから「ace」の値を読み取ります
$space = $app['config']['cache.ace'];
// app/config/cache.php ファイルから「prefix」の値を読み取ります
$prefix = $app['config']['cache.prefix'];
// AceAceMemcachedStore オブジェクトを作成します
$store = 新しい AceAceMemcachedStore($space, $prefix);
// IlluminateCacheRepository オブジェクトを作成して返します
新しい IlluminateCacheRepository($store) を返します;
});
システムがキャッシュドライバーとして「ace」を使用することを指定します: app/config/cache.php を開き、「driver」 => 「...」の行を見つけて、「driver」 => 「ace」に変更します。 .
使用法と制限事項
上記の操作により、Laravel 4 で ACE のキャッシュ サービスを呼び出すことができ、使い方は通常の使い方とまったく同じです。
コードをコピーします コードは次のとおりです:
// キャッシュを追加します。有効期限は 10 分間です
Cache::put('my_key', 'my value', 10);
//読み取りキャッシュ
キャッシュ::get('my_key')
// キャッシュが存在するかどうかを判断します
キャッシュ::has('my_key')
//データクエリキャッシュ
$users = DB::table('users')->remember(10)->get();
ただし、ACE キャッシュ オブジェクト自体の制限により、指定されたキーを持つキャッシュ オブジェクトは削除のみが可能で、トラバースしたり完全に操作したりすることはできないため、 Cache::flush() メソッドは使用できません。上記の AceMemcachedStore オブジェクトでは、flush メソッドは false を返すだけです。
http://www.bkjia.com/PHPjc/955977.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/955977.html技術記事 Alibaba Cloud ACE キャッシュ サービスは Laravel フレームワークに実装されています。laravel Ali を使用する前に、L...
を拡張する方法を紹介した、Laravel 4 フレームワークでの Alibaba Cloud OCS キャッシュの使用に関する記事を書きました。