2016-08-18 6 views
0

私は非常に大きなC#Webサイトを別々のアプリケーションと同じサーバー上で実行されている別々のアプリケーションプールに分割しています。 (背景).net 4.6.xフレームワークを使用しています。 ASP.NET Webフォーム& MVC。一部のアプリケーションプールでは「Classic」が使用され、MVCアプリケーションでは「Integrated」が使用されます。同じサーバー上の複数のアプリケーションプールにまたがるMemoryCacheの単一インスタンス

キャッシュされた特定のアイテムをさまざまなアプリケーションで共有したいと考えています。私は各アプリケーションにキャッシュの独自のコピーを持たせたくありません。キャッシュの共有インスタンスが1つだけ必要です。ここで

は私の質問の心臓部です...

は、どのように私は、同じサーバー上のすべての私のアプリケーションプールを越えMemeroyCacheの単一のインスタンスを共有していますか?あるアプリケーションプールがキャッシュに何かを置く場合、私は他のアプリケーション/プールからそれを取得できるようにします。これは可能か、別の技術を見る必要がありますか?どのような例や示唆も素晴らしいでしょう。 :)

ありがとうございます!

答えて

1

別個のWeb Apiプロジェクトを作成し、そこにMemoryCacheの実装をホストすることができます。次に、すべてのアプリケーションが使用できるキャッシュから項目を取得/設定するAPIを公開します。

このアプローチには注意がありますが、たとえば、MemoryCache.Defaultを使用すると、キャッシュはアプリケーションプールの存続期間中存続します。デフォルトのアプリケーションプールのアイドルタイムアウトは20分で、1時間未満です。私が気づいているのは、App Poolの設定を同期させなければならないと思うので、これが問題につながると思います。

もっと良いアプローチは、分散キャッシュを実装することです。 とStackExchange.Redisクライアントをお勧めします。 memcachedのような他の選択肢があります。

+0

ええ、私は実際にWeb APIのアプローチを考えていました。何らかの理由で、私はMemoryCacheがアプリケーションプールをリサイクルした後にハングするだろうと考えました。私はあなたが言及したように、Redisのような分散キャッシュが優れたアプローチだと思います。お返事ありがとうございます! – Zooly57

関連する問題