1


1

さまざまなアプリケーションに1つのキャッシュ

私は2つのアプリケーションを持っています - 一つはasp.netウェブサイトで、もう一つはwindowsサービスです。

どちらのアプリケーションも私のビジネスレイヤ(ライブラリプロジェクト)を参照しています。これは、それ自体がエンタープライズライブラリデータアプリケーションブロックを使用してSQL Server 2005データベースからデータを受け取る私のデータアクセスレイヤ(ライブラリプロジェクト)を参照しています。

現在私は私のオブジェクトのいくつかをキャッシュするために私のBLでSystem.Web.Caching.Cacheオブジェクトを使用します。

public static System.Web.Caching.Cache Cache
    {
        get
        {
            if(cache == null)
            {
                if (System.Web.HttpContext.Current != null)
                {
                    //asp.net
                    cache = System.Web.HttpContext.Current.Cache;
                }
                else
                {
                    //windows service
                    cache = System.Web.HttpRuntime.Cache;
                }
            }
            return cache;
        }
    }

両方のアプリケーションが独自に実行されているため(どちらも独自のCacheオブジェクトを使用しています)、これが実際には問題です。

私はasp.net Webサイト内のオブジェクトを変更し、それをDBに保存した場合。 このキャッシュキーのオブジェクトはキャッシュから削除されます - asp.netアプリケーションのキャッシュです。 それはいいです。

しかし、Windowsサービスのキャッシュは古くなります!

逆に

両方のアプリケーションが同じキャッシュを使用している可能性はありますか? 両方のアプリケーションに1つのキャッシュ?

私が考えている唯一のオプションは、SqlDependencyを使用する必要があるということです。

他の方法はありますか?

編集:私はhttp://www.codeplex.com/SharedCacheを見つけました。 私はそれを試してみるつもりです。 速度は2009年半ばまでリリース候補の地位にあるからです。

3 Answer


7


マイクロソフトの新しい無料の分散キャッシュ "Velocity"をよく見てください。

これは私が主題についてしたポッドキャストです:http://www.hanselman.com/blog/HanselminutesPodcast116DistributedCachingWithMicrosoftsVelocity.aspx

これがMSDNの詳細です。http://msdn.microsoft.com/en-us/data/cc655792.aspx

ダウンロードとサンプルは次のとおりです。http://code.msdn.microsoft.com/velocity


2


memcachedのような分散キャッシュシステムが必要だと思います。 しかし、もっとたくさんあります、単に素早いグーグルをしてください、そしてあなたはあなたが探しているものを見つけるでしょう。

よろしく、

ヨッヘン


0


キャッシュはアプリドメインごとにのみ有効です。 どうやらあなたはWebアプリとWebサービスの間で同じキャッシュを共有することはできません。 そう .. さまざまな方法で2つのキャッシュを同期させる必要があります。 データが変更されると、キャッシュ依存関係オブジェクトをキャッシュに追加すると、両方のキャッシュアイテムが無効になり、オブジェクトがキャッシュに再ロードされます。 キャッシュ依存関係のメカニズムとして、PollingまたはQN(はるかに優れたパフォーマンス)を使用できます。