在我当前的项目中,他们正在使用AppFabric缓存。但我们发现我们没有正确使用它。
如果我正确阅读了以下article。区域限制为一个缓存主机,命名缓存跨越整个群集。
我们当前看到以下行为。即使我们指定CacheType="Named"
,NHibernate也会创建缓存区域。因此,如果我们重新启动缓存集群,则不会使用集群中的多个节点。
我们只想使用没有区域的命名缓存。
配置如下所示:
<AppFabricProviderSettings CacheType="Named" NamedCacheTypeRegionName="nhibernate" NamedCachesMustExist="false" LockTimeout="30000" LocksRegionName="Locks" />
决定缓存哪个实体的代码如下所示:
if (condition == true)
{
mapping.CacheConcurrencyStrategy = "nonstrict-read-write";
nhConfig.SetCacheConcurrencyStrategy(mapping.EntityName, "nonstrict-read-write", weekCacheName);
}
else if (secondCondition == true)
{
mapping.CacheConcurrencyStrategy = "nonstrict-read-write";
nhConfig.SetCacheConcurrencyStrategy(mapping.EntityName, "nonstrict-read-write", dayCacheName);
}
else
{
mapping.CacheConcurrencyStrategy = "nonstrict-read-write";
nhConfig.SetCacheConcurrencyStrategy(mapping.EntityName, "nonstrict-read-write", hourCacheName);
}
有人可以澄清我们做错了什么以及如何只命名缓存而不是区域?
我还查看了Nhibernate.Caches.AppFabric的代码,我发现令人不安的是关键字区域在代码中被广泛使用。
我们的缓存有效,但有时内存不足,因为所有区域都是在同一主机上创建的