Laravelフレームでアリ雲ACEキャッシュサービスを実現します.
7774 ワード
前にLaravel 4の枠組みの中でアリ雲OCSキャッシュを使用した文章を書きましたが、どのようにLaravel 4を拡張することによってSASL認証が必要なアリ雲OCSキャッシュサービスをサポートするかを紹介しました.ACEのキャッシュはどのようにLaravel 4で使えばいいですか?同じ方法を使うべきだと思っていましたが、自分で試してみたところ、ACEのキャッシュの差が大きいことに気づきました.そこでもう一つ書きます.Laravelの枠組みの中でアリ雲ACEを使うキャッシュサービスを紹介します.
どのようにLaravelのキャッシュドライバを拡張しますか?
Laravel 4でCache:get($key)、Cache:put($value、$minutes)というコードを使用すると、実際に実際に実際にIlluminate\Cache\Repositoryにアクセスしますので、Cache:exted方法でカスタムキャッシュドライブを拡張する場合も、同じようにIllumemitoryオブジェクトに戻ります.
Laravel 4内蔵のMemcachedキャッシュ駆動で実現される流れはこうです.
1.標準Memcached類の新しいオブジェクトを作成する2.前のステップで作成したMemcachedオブジェクトでIlluminate\Cache\StreInterfaceインターフェースを実現したIlluminate\Cache\MemecachedStoreオブジェクトを作成します.3.前のステップで作成したMemcachedStoreオブジェクトでIlluminate\Cache\Repositoryオブジェクトを作成します.
だから、私たちはカスタムのCacheドライバを拡張する時、自分の状況によって、上のステップを選択してカスタマイズします.最終的にはIlluminate\Cache\Repositoryオブジェクトに戻ります.前の記事では、私は最初のステップで標準的なMemcachedオブジェクトを作成した後、set SaslathData()方法でOCSに必要なユーザ名パスワードを設定します.その後、第2ステップ、第3ステップはカスタムが必要ではありません.
ACEのキャッシュサービス
アリークラウドACEのキャッシュサービスは、デフォルトのOCSとは異なります.
1.Alibababababa:Cache()方法でCacheの対象を獲得します.2.ACEのCacheオブジェクトは標準Memcachedオブジェクトとは異なり、サポートの方法は限られています.
ですから、今回の第一歩は標準Memcachedオブジェクトではないので、Illuminate\Cache\MemcachedStoreオブジェクトを作成できません.自分でIlluminate\Cache\StreInterfaceインターフェースを実現する必要があります.
コンソールがキャッシュ空間を作成したら、唯一の「キャッシュ空間名」があります.そしてAlibaba:Cache('キャッシュ空間名')を通じてCacheオブジェクトを獲得します.以下はACEキャッシュサービス駆動を実現するステップです.
1.変更を容易にするために、設定ファイルのap/config/cache.phpにaceというキーを追加し、キャッシュ空間名を保存します.2.AceMemcachedStoreクラスを作成し、このクラスはIlluminate\Cache\StreInterfaceインターフェースを実現します.3.最後に、AceMemcachedStoreオブジェクトでIlluminate\Cache\Repositoryオブジェクトを作成します.
具体的なコードの実現を見てみます.
エンコードはカスタムACEキャッシュドライバを実現します.
最初のステップで、プロファイルを変更します.アプリ/config/cache.phpを開いて、最後の行を追加します.
1.appの同級ディレクトリにディレクトリsrc/Aceを作成します.2.compser.jsonファイルを開けて、autloadセクションを修正し、classmapの下でpsp-0またはpsp-4を使って自動的にファイルをロードします.
AceMemcachedStore類はすでに作成されました.次にbootstrap/start.phpファイルにCacheを拡張します.
bootstrap/start.phpを開いて、以下のコードを追加します.
使用と制限
以上の操作により、Laravel 4でACEのキャッシュサービスを呼び出すことができます.
どのようにLaravelのキャッシュドライバを拡張しますか?
Laravel 4でCache:get($key)、Cache:put($value、$minutes)というコードを使用すると、実際に実際に実際にIlluminate\Cache\Repositoryにアクセスしますので、Cache:exted方法でカスタムキャッシュドライブを拡張する場合も、同じようにIllumemitoryオブジェクトに戻ります.
Laravel 4内蔵のMemcachedキャッシュ駆動で実現される流れはこうです.
1.標準Memcached類の新しいオブジェクトを作成する2.前のステップで作成したMemcachedオブジェクトでIlluminate\Cache\StreInterfaceインターフェースを実現したIlluminate\Cache\MemecachedStoreオブジェクトを作成します.3.前のステップで作成したMemcachedStoreオブジェクトでIlluminate\Cache\Repositoryオブジェクトを作成します.
だから、私たちはカスタムのCacheドライバを拡張する時、自分の状況によって、上のステップを選択してカスタマイズします.最終的にはIlluminate\Cache\Repositoryオブジェクトに戻ります.前の記事では、私は最初のステップで標準的なMemcachedオブジェクトを作成した後、set SaslathData()方法でOCSに必要なユーザ名パスワードを設定します.その後、第2ステップ、第3ステップはカスタムが必要ではありません.
ACEのキャッシュサービス
アリークラウドACEのキャッシュサービスは、デフォルトのOCSとは異なります.
1.Alibababababa:Cache()方法でCacheの対象を獲得します.2.ACEのCacheオブジェクトは標準Memcachedオブジェクトとは異なり、サポートの方法は限られています.
ですから、今回の第一歩は標準Memcachedオブジェクトではないので、Illuminate\Cache\MemcachedStoreオブジェクトを作成できません.自分でIlluminate\Cache\StreInterfaceインターフェースを実現する必要があります.
コンソールがキャッシュ空間を作成したら、唯一の「キャッシュ空間名」があります.そしてAlibaba:Cache('キャッシュ空間名')を通じてCacheオブジェクトを獲得します.以下はACEキャッシュサービス駆動を実現するステップです.
1.変更を容易にするために、設定ファイルのap/config/cache.phpにaceというキーを追加し、キャッシュ空間名を保存します.2.AceMemcachedStoreクラスを作成し、このクラスはIlluminate\Cache\StreInterfaceインターフェースを実現します.3.最後に、AceMemcachedStoreオブジェクトでIlluminate\Cache\Repositoryオブジェクトを作成します.
具体的なコードの実現を見てみます.
エンコードはカスタムACEキャッシュドライバを実現します.
最初のステップで、プロファイルを変更します.アプリ/config/cache.phpを開いて、最後の行を追加します.
//
'ace' => 'lblog-cache',
第二のステップは、簡単にするために、自分のクラスのファイルをsrc/Aceディレクトリの下に置いて、Aceを名前空間として使います.1.appの同級ディレクトリにディレクトリsrc/Aceを作成します.2.compser.jsonファイルを開けて、autloadセクションを修正し、classmapの下でpsp-0またはpsp-4を使って自動的にファイルをロードします.
"autoload": {
"classmap": [
// autoload class
],
"psr-4": {
"Ace\\": "src/Ace"
}
},
src/Ace/AceMemcachedStore.phpファイルを作成します.コードは以下の通りです.
namespace Ace;
use Illuminate\Cache\StoreInterface;
use Illuminate\Cache\TaggableStore;
class AceMemcachedStore extends TaggableStore implements StoreInterface {
protected $memcached;
protected $prefix;
public function __construct($space, $prefix = '') {
$this->memcached = \Alibaba::Cache($space);
$this->prefix = strlen($prefix) > 0 ? $prefix.':' : '';
}
/**
* Retrieve an item from the cache by key.
*
* @param string $key
* @return mixed
*/
public function get($key)
{
$value = $this->memcached->get($this->prefix.$key);
if(is_bool($value) && $value === false) {
return null;
}
return $value;
}
/**
* Store an item in the cache for a given number of minutes.
*
* @param string $key
* @param mixed $value
* @param int $minutes
* @return boolean
*/
public function put($key, $value, $minutes)
{
return $this->memcached->set($this->prefix.$key, $value, $minutes);
}
/**
* Increment the value of an item in the cache.
*
* @param string $key
* @param mixed $value
* @return boolean
*/
public function increment($key, $value = 1)
{
return $this->memcached->increment($this->prefix.$key, $value);
}
/**
* Decrement the value of an item in the cache.
*
* @param string $key
* @param mixed $value
* @return boolean
*/
public function decrement($key, $value = 1)
{
return $this->memcached->decrement($this->prefix.$key, $value);
}
/**
* Store an item in the cache indefinitely.
*
* @param string $key
* @param mixed $value
* @return boolean
*/
public function forever($key, $value)
{
return $this->memcached->set($key, $value, 0);
}
/**
* Remove an item from the cache.
*
* @param string $key
* @return boolean
*/
public function forget($key)
{
return $this->memcached->delete($this->prefix.$key);
}
/**
* Remove all items from the cache.
*
* @return void
*/
public function flush()
{
//$this->memcached->flush();
return false;
}
public function getMemcached()
{
return $this->memcached;
}
/**
* Get the cache key prefix.
*
* @return string
*/
public function getPrefix()
{
return $this->prefix;
}
}
このコードは簡単ですが、get($key)方法の実現には特に注意してください.標準的なmemcachedおよびACEのキャッシュオブジェクトのget方法は、keyが有効である場合には対応するキャッシュ値を返します.そうでなければfalseに戻り、Laravel 4では、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'];
// \Ace\AceMemcachedStore
$store = new \Ace\AceMemcachedStore($space, $prefix);
// \Illuminate\Cache\Repository
return new \Illuminate\Cache\Repository($store);
});
指定されたシステムはキャッシュドライバとして「ace」を使います.ap/config/cache.phpを開いて、「driver'=''''ace'を見つけます.使用と制限
以上の操作により、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キャッシュオブジェクト自体の制限のため、指定されたkeyのキャッシュオブジェクトのみが削除され、巡回、フルボリュームで操作できないので、Cache:flush()メソッドは使用できません.上記のAceMemcachedStoreオブジェクトでは、flushメソッドは何の操作もしていません.falseに戻ります.