各种应用程序的一个缓存?

时间:2009-01-26 10:52:40

标签: asp.net sql-server caching

我有两个应用程序 - 一个是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网站中的对象并将其保存到数据库中。从缓存中删除此缓存键的对象 - asp.net应用程序的缓存!没关系。

但是Windows服务的缓存变得过时了!

反之亦然

两个应用程序是否可能使用相同的缓存?两个应用程序都有一个缓存?

我想到的唯一选择是我必须使用SqlDependency和

  

Sql Server 2005 Notification-based Cache Invalidation

还有其他方法吗?

编辑: 我刚刚找到了http://www.codeplex.com/SharedCache。我会试试看。 因为速度将在2009年中期之前处于候选发布状态。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

我认为你需要的是像memcached这样的分布式缓存系统。但还有更多,只需快速谷歌,你就会找到你想要的东西。

http://www.google.com/search?q=distributed+caching

此致

约亨

答案 2 :(得分:0)

缓存仅适用于每个App域。显然,您无法在Web应用程序和Web服务之间共享相同的缓存。 所以..你必须通过各种方式使2个缓存同步。将缓存依赖项对象添加到缓存中,一旦数据发生更改,它将使两个缓存项无效并将对象重新加载到缓存中。 您可以使用轮询或QN(更好的性能)作为缓存依赖性机制。