3

現在 HttpContext.Cache に保存しているオブジェクトとクラスがいくつかありますが、アプリ プールがリサイクルされたときやマシンが再起動されたときでも、これらを永続的にしたいと考えています。AppFabric または Memcached の使用を調べてみましたが、ローカル キャッシュではなく、分散キャッシュに重点が置かれているようでした。また、AppFabric と組み合わせた EF STE はシリアル化可能なクラスに依存しているようで、クラスの一部のプロパティは、たとえば、シリアル化できない .NET クラスへの参照です (たとえば、System.Net.WebSockets のインスタンスへの参照があります)。 WebSocket をプロパティとして)。

だから私の質問は次のとおりです:誰かが私に何か良いアイデアを与えるか、ディスクに永続的な何らかのローカルキャッシュにクラスを保存できるようにするフレームワークを教えてもらえますか(またはデータベースに何かを保存できる場合) ?

4

3 に答える 3

1

新しい Appfabric 1.1 には、キャッシュの永続性を保証するリードスルー機能とライトビハインド機能があります。

読み取り- 要求された項目がキャッシュに存在しない場合、データをバックエンド ストアから読み込んでキャッシュに挿入できます。リードスルー プロバイダーを使用すると、キャッシュは不足しているアイテムを検出し、プロバイダーを呼び出してデータの読み込みを実行します。その後、アイテムはキャッシュ クライアントにシームレスに返されます。
ライト ビハインド- 同様に、キャッシュに追加または更新されたアイテムは、ライトスルー プロバイダーを使用して定期的にバックエンド ストアに書き込むことができます。これは、キャッシュによって定義された間隔で非同期に発生します。

実装の詳細については、こちらのブログ投稿をご覧くださいhttp://blogs.msdn.com/b/prathul/archive/2011/12/06/appfabric-cache-read-from-amp-write-to-database-read -through-write-behind.aspx

于 2012-08-10T04:37:26.407 に答える
0

RavenDB を見てください。これは NoSQL データベースですが、非常に軽量で .net と非常に統合されているため、クラスを保存して、このクラスのインスタンスとして取得することができます。

于 2012-08-04T20:16:45.193 に答える
0

クラスをシリアライズしたい場合は、おそらくクラスの構造を再考する必要があります。HttpContext.Cacheしかし、当面の問題については、オブジェクトをキャッシュし、アプリ プールのリサイクル後も保持する場合は、インプロセス メモリの代わりに SQL Server を使用するように構成することを検討する必要があります。次のリンクを確認してください。

ASP.NET キャッシュの概要

チュートリアル: SQL Server での ASP.NET 出力キャッシュの使用

ただし、テクノロジー/プラットフォーム固有のリソースに対してラッパーを使用することをお勧めします。たとえば、基本的に内部CacheWrapperアクセスするクラスを使用する方がはるかに優れています。HttpContext.Cacheこのようにして、必要に応じてラッパー クラスの実装を簡単に変更して、別のキャッシュ ストアを使用することができます。

于 2012-08-04T21:06:57.483 に答える