[Architect]ABP(現代ASP.NETテンプレート開発フレームワーク)(9)Caching

2938 ワード

このセクションのディレクトリ

  • 紹介
  • ICacheManager
  • WARNING: GetCache Method

  • ICache
  • ITypedCache
  • Configuration

  • 紹介する


    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つのパラメータがあります.
  • key:cacheで一意の文字列.
  • factory:所与のkeyにおいて、対応するitemが見つからない場合.Factory methodは対応するitemを作成して返すべきである.cacheで見つけられる場合、Actionは呼び出されません.

  • 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を自由に構成、初期化することもできる.