[Architect]ABP(現代ASP.NETテンプレート開発フレームワーク)(9)Caching
2938 ワード
このセクションのディレクトリ
紹介する
Abpは1つのキャッシュの抽象を提供する.内部ではこのキャッシュ抽象を用いる.デフォルトの実装ではMemoryCacheが使用するが、他のキャッシュに切り替えることができる.
ICacheManager
キャッシュを提供するインタフェースはICacheManagerです.私たちは彼を注入して使用することができます.次のようになります.
public class TestAppService : ApplicationService
{
private readonly ICacheManager _cacheManager;
public TestAppService(ICacheManager cacheManager)
{
_cacheManager = cacheManager;
}
public Item GetItem(int id)
{
//Try to get from cache
return _cacheManager
.GetCache("MyCache")
.Get(id.ToString(), () => GetFromDatabase(id)) as Item;
}
public Item GetFromDatabase(int id)
{
//... retrieve item from database
}
}
上記の例では、ICacheManagerを注入するMyCacheというキャッシュを1つ得る.
WARNING: GetCache Method
構造関数でGetCacheメソッドを使用しないでください.クラスがtransientならCacheを解放するかもしれません
ICache
ICacheManager.GetCacheメソッドはICacheを1つ返します.各Cacheは単例です.最初のリクエスト時に作成し、同じcacheインスタンスを常に使用します.だから、私たちはcacheを異なるclassで共有します.
ICache.Getメソッドには2つのパラメータがあります.
ICache interface also has methods like GetOrDefault, Set, Remove and Clear. There are also async versions of all methods.
ICacheインタフェースはGetOrDefault,Set,Remove and Clearのような方法も提供する.同様にすべての方法のasyncバージョンが提供されている.
ITypedCache
ICacheインタフェースはstringをkey、objectをvalueとする.ITypedCache包装ICache提供タイプ安全、汎用cache.ICacheをITypedCacheに変更するには、AsTyped拡張メソッドを使用する必要があります.
ITypedCache<int, Item> myCache = _cacheManager.GetCache("MyCache").AsTyped<int, Item>();
Getメソッドを使用すると、手動で変換する必要はありません.
Configuration
デフォルトのcache expire timeは60 minです.これはスライドの期限切れです.したがって、1つのitemを60分以上使用しないと、自動的にキャッシュから削除されます.すべてのcacheまたは1つのcacheを構成できます.
//Configuration for all caches
Configuration.Caching.ConfigureAll(cache =>
{
cache.DefaultSlidingExpireTime = TimeSpan.FromHours(2);
});
//Configuration for a specific cache
Configuration.Caching.Configure("MyCache", cache =>
{
cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8);
});
このコードはmoduleのPreInitializeメソッドに置くべきである.上記のコードでは、MyCacheは8時間のexpire timeがあり、他のcacheは2時間ある.
あなたの構成Actionは最初のリクエスト時に1回しか呼び出されません.expire timeの他、ICacheを自由に構成、初期化することもできる.