この記事では主に、Laravel フレームワークでの Alibaba Cloud ACE キャッシュ サービスの使用の実装について紹介します この記事では、Alibaba Cloud ACE キャッシュ サービスを使用するために ACE キャッシュ ドライバーを拡張します。 、これは必須です お友達はそれを参照できます
以前、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 オブジェクトを作成します。
そのため、カスタム Cache ドライバーを拡張するときは、上記の手順のいずれかを選択して独自の状況に応じてカスタマイズし、最終的に IlluminateCacheRepository オブジェクトを返します。たとえば、前の記事では、最初のステップで、標準 Memcached オブジェクトを作成した後、setSaslAuthData() メソッドを通じて OCS に必要なユーザー名とパスワードを設定しました。後続の手順 2 と 3 をカスタマイズする必要はありません。
ACEのキャッシングサービス
Alibaba Cloud ACE のキャッシュ サービスはデフォルトの OCS とは異なります:
1. Alibaba::Cache() メソッドを通じて Cache オブジェクトを取得します。
2.ACEのCacheオブジェクトは標準のMemcachedオブジェクトとは異なり、限定されたメソッドをサポートします。
つまり、今回最初のステップで取得するものは標準の Memcached オブジェクトではないため、IlluminateCacheMemcachedStore オブジェクトを作成することはできません。 IlluminateCacheStoreInterface インターフェイスを自分で実装する必要があります。
コンソールでキャッシュスペースが作成されると、一意の「キャッシュスペース名」が作成され、Alibaba::Cache('キャッシュスペース名')を通じて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. appと同じ階層のディレクトリに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 TuggableStoreimplements StoreInterface {
保護された $memcached;
保護された $prefix;
パブリック関数 __construct($space, $prefix = '') {
$this->memcached = Alibaba::Cache($space);
$this->prefix = strlen($prefix) > $prefix.':' : '';
}
/**
* キーによってキャッシュからアイテムを取得します。
*
* @param string $key
* @returnmixed
*/
パブリック関数get($key)
{
$value = $this->memcached->get($this->prefix.$key);
if(is_bool($value) && $value === false) {
null を返す;
}
$value を返す;
}
/**
* アイテムを指定された時間分キャッシュに保存します。
*
* @param string $key
* @parammixed$value
* @param int $ minutes
* @return boolean
*/
public function put($key, $value, $ minutes)
{
return $this->memcached->set($this->prefix.$key, $value, $ minutes);
}
/**
* キャッシュ内の項目の値をインクリメントします。
*
* @param string $key
* @parammixed$value
* @return boolean
*/
パブリック関数increment($key, $value = 1)
{
return $this->memcached->increment($this->prefix.$key, $value);
}
/**
* キャッシュ内の項目の値をデクリメントします。
*
* @param string $key
* @parammixed$value
* @return boolean
*/
public function decrement($key, $value = 1)
{
return $this->memcached->decrement($this->prefix.$key, $value);
}
/**
* アイテムをキャッシュに無期限に保存します。
*
* @param string $key
* @parammixed$value
* @return boolean
*/
パブリック関数forever($key, $value)
{
return $this->memcached->set($key, $value, 0);
}
/**
* キャッシュからアイテムを削除します。
*
* @param string $key
* @return boolean
*/
パブリック関数forget($key)
{
return $this->memcached->delete($this->prefix.$key);
}
/**
* キャッシュからすべてのアイテムを削除します。
*
* @return void
*/
パブリック関数 flash()
{
//$this->memcached->flush();
falseを返す;
}
パブリック関数getMemcached()
{
return $this->memcached;
}
/**
* キャッシュキープレフィックスを取得します。
*
* @return string
*/
パブリック関数getPrefix()
{
return $this->prefix;
}
}
標準の memcached と ACE の保存オブジェクトの get メソッドはすべて、key の有効なタイミングでその保存オブジェクトを返しますが、Laravel 4 では false を返します。中は、 get メソッドが返されるかどうかを検査することで判断されるため、ここでは格納値または null を返す処理が必要です。AceMemcachedStore类已经创建好了,次来在 bootstrap/start.php 文件中扩展 キャッシュ:
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 = new AceAceMemcachedStore($space, $prefix);
// 创建并は IlluminateCacheRepository 对オブジェクトを返します
return new IlluminateCacheRepository($store);
});
指定システム统使用 'ace' として缓存驱动:打开 app/config/cache.php,找到 'driver' => '...' の位置行、修正範囲:'driver' => 「エース」
使用制限
以上の操作により、Laravel 4 で ACE の保存サービスを使用することができ、上と平常の使用法完全一致、比如:
代码如下:
// 追加缓存,有效時間间10分钟
Cache::put('my_key', 'my value', 10);
// 读取缓存
Cache::get('my_key')
// 缓存の有無を判断する
Cache::has('my_key')
// データ查询缓存
$users = DB::table('users')->remember(10)->get();
ただし、ACE 保持オブジェクト自体の制限により、指定されたキーの保持オブジェクトを削除することしかできず、全量操作ができないため、Cache::flush() メソッドは使用できません。 ,只是は false を返します。
。