AppFabric缓存本地缓存对我们不起作用......我们做错了什么?

时间:2011-01-10 17:49:59

标签: nhibernate caching appfabric second-level-cache

我们正在使用appfabric作为NHibernate asp.net应用程序的第二级缓存,其中包括面向客户的网站和管理员网站。它们都连接到同一个缓存,因此当管理员更新某些内容时,面向客户的站点会更新。

它似乎工作正常 - 我们在一个单独的服务器上有一个CacheCLuster,一切都很好,但我们想让localcache获得更好的性能,但是,它似乎正在工作。

我们已经启用了它......

  bool UseLocalCache = 
  int LocalCacheObjectCount = int.MaxValue;
  TimeSpan LocalCacheDefaultTimeout = TimeSpan.FromMinutes(3);
  DataCacheLocalCacheInvalidationPolicy LocalCacheInvalidationPolicy = DataCacheLocalCacheInvalidationPolicy.TimeoutBased;

        if (UseLocalCache)
        {
            configuration.LocalCacheProperties =
                new DataCacheLocalCacheProperties(
                    LocalCacheObjectCount,
                    LocalCacheDefaultTimeout,
                    LocalCacheInvalidationPolicy
                    );

          //  configuration.NotificationProperties =  new DataCacheNotificationProperties(500, TimeSpan.FromSeconds(300));
        }

最初我们尝试使用超时失效策略(3分钟),我们的应用感觉它运行得更快。但是,我们注意到如果我们在管理站点中更改了某些内容,则会在实时站点中进行更新。由于我们使用超时而非通知,这表明本地缓存未被查询(或者是,但总是丢失)。

cache.GetType()。Name返回“LocalCache” - 因此工厂已经建立了本地缓存。

在我的开发环境中运行“Get-Cache-Statistics MyCache”(从vs2008本地运行的asp.net应用程序,在单独的w2k8计算机上运行的缓存集群)显示了一些Request Counts。但是,在生产环境中,请求计数会显着增加。

我们尝试按照这里的方法来查找缓存cliebt-server流量... http://blogs.msdn.com/b/appfabriccat/archive/2010/09/20/appfabric-cache-peeking-into-client-amp-server-wcf-communication.aspx但是日志文件只有其中的初始头 - 即没有loggin。

我无法在SO或Google中找到任何内容。

我们做错了吗?我们是否安装了AppFabric - 我们通过WebPlatform Installer安装它 - 我想? (注意:运行ASp.net的IIS框不在集群中 - 它只是客户端)。

任何深刻见解的见解!

3 个答案:

答案 0 :(得分:1)

您使用哪些DataCache方法从缓存中读取?无论是否配置了本地缓存,一些DataCache方法总是会对服务器产生影响。如果您希望利用本地缓存,则必须确保仅使用Get

这是我在AppFabric缓存方面的最大优势。他们没有向你解释任何这些,所以当你开始依赖本地缓存时,你开始陷入这些小陷阱,因为你不认为你因为与服务交谈而付出代价,通过网络传输数据和反序列化对象,但你是。

最糟糕的是,我可以理解必须与服务通信以确保本地缓存代表最新数据。我甚至可以理解将数据传回,以便不进行多次通话。但是我无法理解的是,即使本地缓存中的实例仍然是从缓存中返回的当前版本,它们仍然反序列化该对象。连线而不仅仅是返回已经在内存中的实例。如果你的物体很大/很复杂,这会伤害很多。

答案 1 :(得分:1)

经过几天和几天的研究,为什么我们得到了如此多的本地缓存未命中,我们终于解决了它:

  1. AppFabric v 1.1中存在一个在CU4中修复的本地缓存错误,请参阅http://support2.microsoft.com/kb/2800726/en-us
  2. 确保应用程序使用的Microsoft.ApplicationServer.Caching.Client.dll也已更新。我们在机器上安装了CU4,但在我们的应用程序中从NuGet包中获得了没有CU4的Client.dll。在我们的例子中,一个简单的NuGet包更新使一切正常。
  3. 安装CU4并确保Client.dll也已更新后,由于本地缓存命中率的增加,我们减少了对AppFabric主机的读取。耶!

答案 2 :(得分:0)

您是否尝试过使用nhibernate探查器? http://nhprof.com/

还有这个: http://mdcadmintool.codeplex.com/

这是一种管理和查看缓存的好方法。

这些都可能有助于调试问题。