2017-02-17 14 views
2

私はSQLサービスから取得したデータをキャッシュしようとしていますが、System.Runtime.Cachingのメモリキャッシュクラスを使用しようとしましたが、アプリケーションを終了するたびにキャッシュが空になっているようです。アプリケーション外部のキャッシュデータ

私の質問は、私のアプリケーションを再起動しても私が得ることができるように私のデータをキャッシュする方法はありますか?

Im BizTalkからサービスを使用するため、必要なときにアプリケーションが開始されますが、SQLポーリングには時間がかかりすぎます。ここで

があるとのコードイムテスト:

const string KEY = "key"; 

    static void Main(string[] args) 
    { 
     MemoryCache cache = MemoryCache.Default; 

     Cache(cache); 
     Get(cache); 
     Console.Read(); 
    } 

    private static void Get(MemoryCache cache) 
    { 
     string result = cache.Get(KEY) as string; 
     Console.WriteLine(result); 
    } 

    private static void Cache(MemoryCache cache) 
    { 
     CacheItemPolicy policy = new CacheItemPolicy(); 
     policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10); 
     bool res = cache.Add(KEY, "This was Cached", policy); 
     if (res) 
      Console.WriteLine("Added Succesfully"); 
     else 
      Console.WriteLine("Adding Failed"); 
    } 
+0

MemoryCacheは、データをメモリに保存するだけです。 FileCacheまたはDatabaseCacheが必要ですが、フレームワークにAFAIKは存在しません。 – rene

+2

キャッシュのためにRedis(https://redis.io/)を試すことができます – Sergey

答えて

0

だから私の質問は、私のアプリケーションを再起動しても、私のデータはので、私はそれを得ることができますキャッシュに方法はありますか?

はい。 CacheItemPriority.NotRemovableを使用すると、アプリケーションが再起動してもキャッシュは存続します。

ObjectCache cache = System.Runtime.Caching.MemoryCache.Default; 
CacheItemPolicy policy = new CacheItemPolicy 
{ 
    Priority = CacheItemPriority.NotRemovable, 
    AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10); 
}; 

cache.Add(item, policy); 

MSDN注: NotRemovableの優先度のキャッシュにエントリを追加するには、除去することはできませんエントリにキャッシュをオーバーフローする可能性を有します。キャッシュ実装は、キャッシュエントリをキャッシュから退去させ、キャッシュエントリの数を管理する方法を提供する場合にのみ、キャッシュエントリのNotRemovable優先度を設定する必要があります。

+0

これはmemorycacheで動作しますか? –

+0

"アプリケーションの再起動"が新しいプロセス/アプリケーションドメインを意味する場合、MemoryCacheにキャッシュされているアイテムがキャッシュされていても、MemoryCacheに以前にキャッシュされたアイテムが残っていることはありません); – MichaC

+0

これはASP.NETベースのアプリケーションで機能します。もちろん、シッククライアントについて話している場合は、アプリケーションの再起動は別の話です。キャッシュを含め、割り当てられたすべてのメモリが失われます。しかし、私はASP.NETでこれを使用しており、キャッシュされたデータを失うことなくアプリケーションを再起動できます。 – NightOwl888

関連する問題