Performance AppFabric缓存-正确使用DataCacheFactory和DataCache
我正在寻找最有效的方法来安排使用datacache和datacache工厂进行AppFabric缓存调用,每页面加载400到700次缓存(几乎没有任何put)。似乎使用一个静态DataCacheFactory(或者在循环设置中使用一对静态DataCacheFactory)是一种可行的方法 我是为每个DataCache对象请求调用GetCache(“cacheName”),还是在初始化DataCache工厂时创建一个静态,并将其用于所有调用 我是否必须处理异常、检查失败代码并重试 当多个线程尝试使用缓存存储并需要相同的项(按密钥)时,是否必须考虑争用?< /P> 是否有某种文档正确地探讨了此功能的设计和使用?Performance AppFabric缓存-正确使用DataCacheFactory和DataCache,performance,caching,appfabric,Performance,Caching,Appfabric,我正在寻找最有效的方法来安排使用datacache和datacache工厂进行AppFabric缓存调用,每页面加载400到700次缓存(几乎没有任何put)。似乎使用一个静态DataCacheFactory(或者在循环设置中使用一对静态DataCacheFactory)是一种可行的方法 我是为每个DataCache对象请求调用GetCache(“cacheName”),还是在初始化DataCache工厂时创建一个静态,并将其用于所有调用 我是否必须处理异常、检查失败代码并重试 当多个线程尝试使
我从论坛收集到的一些信息: 创建工厂需要连接到群集,可能需要一些时间。但是,一旦您拥有了要使用的工厂对象和缓存,您就可以简单地重用这些对象来执行放入和进入缓存的操作,您应该会看到更快的性能 创建单个DataCacheFactory(singleton)比创建多个DataCacheFactory的性能更高。您不应该为每个调用创建DataCacheFactory,它会影响性能 “请尝试在单例中封装循环算法(具有3/4/5个工厂实例),并比较负载测试结果。” “您可以增加客户端数量以增加缓存吞吐量。但有时,如果您希望拥有较小的客户端集并提高吞吐量,一个技巧是使用多个DataCacheFactory实例。DataCacheFactory实例创建到服务器的连接(例如,如果有3台服务器,它将创建3个连接)并将来自DataCache的所有请求多路传输到这些连接。因此,如果put/get卷非常大,这些TCP连接可能会受到限制。因此,一种方法是创建多个DataCacheFactory实例,然后对其使用操作。”
这里是目前正在使用的。。。调用属性,如果返回值不为null,则执行操作
private static DataCache Cache
{
get
{
if (_cacheFactory == null)
{
lock (Sync)
{
if (_cacheFactory == null)
{
try
{
_cacheFactory = new DataCacheFactory();
}
catch (DataCacheException ex)
{
if (_logger != null)
{
_logger.LogError(ex.Message, ex);
}
}
}
}
}
DataCache cache = null;
if (_cacheFactory != null)
{
cache = _cacheFactory.GetCache(_cacheName);
}
return cache;
}
}
在Microsoft AppFabric论坛上查看此问题: 我是否需要调用GetCache(“cacheName”)以获取 每个DataCache对象请求,或执行 我一次做一个静电 数据缓存工厂已初始化,并且 所有电话都用这个吗 我想答案应该是;两种方法都试一下,看看是否有区别,但在我看来,对于要获取的每个调用,一个静态数据缓存似乎比相应地调用
GetCache
更有意义
那篇“推动客户机性能”的文章指出,有一个最佳点,DataCacheFactory实例的数量可以使您获得最大性能,超过这个最佳点,内存开销就开始对您不利了——遗憾的是,他们没有给出任何关于这一点的指导原则(甚至是经验法则)
我还没有看到任何关于性能最大化的文档——我认为AppFabric对于这些指导原则来说还是太新了,还不足以彻底改变。我确实查看了AppFabric的内容,但它似乎更关注AppFabric的工作流(都柏林)方面,而不是缓存(Velocity)部分
不过我想说的一件事是:您是否有可能缓存“chunkier”对象,以便减少对
Get
的调用?是否可以缓存集合而不是单个对象,然后在客户端上解压缩集合?在我看来,每页加载700次缓存似乎是一个巨大的数字 以下是论坛帖子的答案:
嗨。很抱歉延迟回复,
但我想说的是,这些都很棒
问题和答案可能会有用
对其他人来说
不应该有更多的需要
每个线程有多个DataCacheFactory
除非您需要不同的
配置。例如,如果你
以编程方式配置
带有
DataCacheFactoryConfiguration类,
那么您可能想创建一个
已启用本地缓存,并且另一个
但事实并非如此。在这种情况下,你会
使用不同的DataCacheFactory对象
取决于您选择的配置
对于您的场景,需要。但其他
相比于配置上的差异,您
不应通过以下方式获得性能提升:
创建多个DataCacheFactory
在同一主题上,有一个
MaxConnectionsToServer设置(或
编程的
DataCacheFactoryConfiguration或中的
应用程序配置文件如下所示:
dataCacheClient的属性
元素)。这决定了数量
每个DataCacheFactory的chennels数
已打开到缓存群集。如果
您有高吞吐量需求
以及可用的CPU/网络
带宽,将此设置增加到
3或更高可以增加吞吐量。
我们不建议增加这个
没有理由或达到一个
对你的需求来说太高了。你应该
更改该值,然后测试您的
观察结果的情景。我们
希望有更多的官方指导
这是将来的事
一旦有了DataCacheFactory,您就可以
不需要调用GetCache()
多次得到多次
数据缓存对象。每一个电话
上相同缓存的GetCache()
同一工厂退货相同
数据缓存对象。还有,一旦你
DataCache对象,您不需要
继续调用DataCacheFactory
为了它。只需存储数据缓存
对象并继续使用它。
但是,不要让
已释放DataCacheFactory对象。
DataCache对象的生命周期为
绑定到DataCacheFactory对象
你永远不必担心
与Get请求的争用。然而,
对于Put/Add请求,可以