Entity Framework (EF) Core Cache

Entity Framework(EF)Cor​​eは、EntityFrameworkオブジェクトリレーショナルマッピングエンジンの再設計および書き直されたバージョンです。 .NET Core アプリケーション。 非常に軽量で、拡張性があり、クロスプラットフォームです。

ただし、高いトランザクション .NET Core を使用するアプリケーション EFコアフェイスパフォーマンス ピーク負荷時のデータベース層におけるスケーラビリティのボトルネック。 これは、アプリケーションサーバーを追加することでアプリケーション層を線形にスケーリングできますが、データベースサーバーを追加してスケーリングすることはできないためです。

ただし、次のような分散キャッシュを使用する場合 NCache 自分で .NET Core アプリケーション、あなたはすぐにこれらを削除することができます パフォーマンスとスケーラビリティのボトルネック 極端なトランザクション負荷を処理します。

拡張メソッドによるEFコアキャッシング

拡張メソッドはC#の機能であり、派生クラスを作成せずに既存のクラスと型を拡張できます。 拡張メソッドは特殊な種類の静的メソッドですが、拡張クラスのインスタンスメソッドであるかのように呼び出されます。

NCache 拡張メソッドを介してEFコアにキャッシュ機能を統合しました。 これにより、 NCache 内から EFコアアプリケーション 非常にシンプルで簡単です。 以下は、によって提供されるEFコア拡張メソッドのリストです。 NCache.

1.トランザクションデータのキャッシュ:FromCache()/ FromCacheAsync()

EF Coreにキャッシュする最も一般的なデータは、トランザクションデータです。 これは、実行時に作成される頻繁に変更されるデータ(顧客、アカウント、アクティビティなど)であり、アプリケーションが複数回読み取る短時間だけキャッシュします。

FromCache()拡張メソッドを使用すると、の結果セットをキャッシュすることでトランザクションデータをキャッシュできます。 LINQクエリ。 以下の例を参照してください。

//Load suppliers into the cache with the expiration options 
IEnumerable<Suppliers> suppliers = (from supplier in database.Suppliers
				      where supplier.SupplierId < 10
				      select supplier).FromCache(options);

ここで、このデータをフェッチするためにデータベースに移動する前に、FromCache()メソッドはこのデータのキャッシュをチェックします。 見つかった場合は、キャッシュから返します。 それ以外の場合は、データベースからフェッチし、最初にキャッシュして次回に存在するようにしてから、結果を呼び出し元に返します。

コレクション全体をXNUMXつのアイテムとしてキャッシュにキャッシュするか、すべてのエンティティを分割して個別にキャッシュするかを選択できます。 ブレイクアウトは、これらのエンティティを個別にフェッチまたは更新する場合にも役立ちます。 以下は、このメソッドの非同期バージョンです。

//Load suppliers into the cache with the expiration options asynchronously
Task<IEnumerable><Suppliers> suppliersTask = (from supplier in database.Suppliers
                                                where supplier.SupplierId < 10
                                                select supplier).FromCacheAsync(options);
suppliersTask.Wait();
IEnumerable<Suppliers> suppliers = suppliersTask.Result.ToList();

2.参照データのキャッシュ:LoadIntoCache()/ LoadIntoCacheAsync()

参照データは、完全にキャッシュする必要があるものです。 これにより、実行できます LINQクエリ キャッシュ上でのみ、データベースにアクセスすることはありません。 データセット全体がキャッシュにない場合、LINQクエリの結果は、キャッシュをチェックし、データセット全体がキャッシュにあると想定するだけなので、正しくないことに注意してください。

LoadIntoCache()拡張メソッドを使用すると、EFコアキャッシュにすべての参照データを取り込むことができます。 キャッシュの設定については、以下の例を参照してください。

//Load ALL products into the cache as reference data
IEnumerable<Products> products = (from product in database.Products
                                    select product)
                                    .LoadIntoCache(out string cacheKey, options);

3.参照データの検索:FromCacheOnly()/ FromCacheOnlyAsync()

すべての参照データをキャッシュにロードしたら、データベースの代わりにLINQクエリを実行できます。 これにより、データベースへの負担が軽減され、アプリケーションのパフォーマンスとスケーラビリティが向上します。 以下の例を参照してください。

//Query for discontinued products from the reference data cache
IEnumerable<Products> products = (from product in database.Products
                                    where product.Discontinued == true
                                    select product).FromCacheOnly();

EF Core参照データキャッシュにはデータセット全体(この場合はProductsなど)が含まれている必要があることに注意してください。 それ以外の場合、FromCacheOnly()拡張メソッドはデータベースをチェックしないため、キャッシュにあるものだけを返します。 そして、これは正しくない可能性があります。

4.キャッシュの更新:EFコアのキャッシュクラス

EF Coreでエンティティに変更を加えるときはいつでも、「Cache」ハンドルを取得して適切なupdateメソッドを呼び出すことにより、EFCoreCacheを更新できます。 以下に例を示します。

// Initialize the database context
NorthwindContext database = new NorthwindContext();
    ...
// Add some new entities to the database
database.Shippers.Add(shipperPandaExpress);
database.Shippers.Add(shipperTitanic);
database.SaveChanges();
  
Cache cache = database.GetCache();
cache.Insert(shipperPandaExpress, out cacheKey, options);
cache.Insert(shipperTitanic, out cacheKey, options);
  
//By obtain a Cache class handle, you can directly add, update, or remove entities from EF Core. And, then updated data shows up in your LINQ queries. This gives you a lot more control over updating entities when your modifying data yourself. Below is the interface of Cache class.
    
namespace Alachisoft.NCache.EntityFrameworkCore
{
    public class Cache
    {
        public void Insert(object entity, out string cacheKey, CachingOptions options);
        public void Remove(object entity);
        public void Remove(string cacheKey);
        public void RemoveByQueryIdentifier(Tag tag);
    }
}

なぜ使うの? NCache EFコアキャッシュとして?

Entity Framework Coreには、キャッシュフレームワークが付属していません( Hibernate します)。 しかし、 NCache は、非常に柔軟で強力でありながら、非常にシンプルなキャッシュフレームワークを開発しました。 次の理由で使用する必要があります。

  • マルチサーバー環境での使用: NCache は、マルチサーバー環境で非常にうまく機能する分散キャッシュです。 もしあなたの .NET Core アプリケーションはトランザクションが多いため、マルチサーバー環境で実行されている可能性があります。 NCache あなたのために働くでしょう。
  • 非常に速い: NCache は非常に高速なメモリ内分散キャッシュであり、ミリ秒未満の応答時間を提供します。
  • 線形スケーラビリティ: NCache スケーラビリティのボトルネックになることはありません。 これにより、サーバーをキャッシュクラスターに追加して、線形スケーラビリティを実現し、極端なトランザクション負荷を処理できます。
  • キャッシュサイズは無限に大きくなります。 NCache キャッシュパーティショニングを提供し、すべてのキャッシュサーバーのメモリを一緒にプールします。 だからあなたはできる キャッシュストレージを増やす キャッシュクラスターにサーバーを追加するだけです。
  • インテリジェントなデータレプリケーション: NCache インテリジェントに複製 キャッシュとパフォーマンスを損なうことなく。 したがって、キャッシュサーバーがダウンしても、キャッシュデータが失われることはありません。
  • NCache 100%の稼働時間を提供します: NCache ています 自己修復動的キャッシュクラスター 単一障害点はありません。 結果として、 NCache アプリケーションやキャッシュを停止することなく、実行時にキャッシュサーバーを追加または削除できます

すべての詳細をご覧ください NCache の機能 エディションの比較 ページ。 についてもっと読む NCache の完全に機能する 30 日間の試用版をダウンロードします。 NCache 以下のリンクから。

次はどうする?

お問い合わせ(英語)

電話
©著作権 Alachisoft 2002 - . All rights reserved. NCache はダイヤテック株式会社の登録商標です。