我们使用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” – 因此工厂已经创建了本地缓存.
在我的开发环境中运行PS中的“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框不在集群中 – 它只是客户端).
任何见解都很受欢迎!
最佳答案 您使用哪种DataCache方法从缓存中读取?无论是否配置了本地缓存,一些DataCache方法总是会对服务器产生影响.如果您希望利用本地缓存,则必须确保只使用Get.
这是AppFabric缓存最大的问题.他们没有向你解释任何这些,所以当你开始依赖本地缓存时,你开始陷入这些小陷阱,因为你不认为你因为与服务交谈而付出代价,通过网络传输数据和反序列化对象,但你是.
最糟糕的是,我可以理解必须与服务通信以确保本地缓存代表最新数据.我甚至可以理解将数据传回,以便不进行多次通话.我无法理解的是,即使本地缓存中的实例仍被验证仍然是从缓存中返回的当前版本,它们仍然会从线路反序列化对象而不是仅仅返回实例那已经在记忆中了.如果你的物体很大/很复杂,这可能会造成很大的伤害.