我正在寻找最高效的方式来安排 AppFabric 缓存调用的数据缓存和数据缓存工厂的使用,每页加载 400 到 700 个缓存获取(几乎没有任何放置)。似乎使用单个静态 DataCacheFactory (或者可能是循环设置中的一对)是要走的路。
我是为每个 DataCache 对象请求调用 GetCache("cacheName"),还是在初始化 DataCache 工厂时将其设为静态并将其用于所有调用?
我是否必须处理异常、检查失败代码并尝试重试?
当多个线程尝试使用缓存存储并想要相同的项目(按键)时,我是否必须考虑争用?
是否有某种文档可以正确探索其设计和使用?
到目前为止我从论坛收集的一些信息:
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
“创建工厂涉及连接到集群,可能需要一些时间。但是一旦你有了工厂对象和想要使用的缓存,你就可以简单地重用这些对象来执行放入和进入缓存,你应该看到更快的性能。”
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
“创建单个 DataCacheFactory(单例)比创建多个 DataCacheFactory 性能更高。您不应该为每个调用创建 DataCacheFactory,它会影响性能。”
“请尝试在您的单例中封装循环算法(具有 3/4/5 个工厂实例)并比较负载测试结果。”
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
“您可以增加客户端的数量以增加缓存吞吐量。但有时如果您希望拥有较小的客户端集并增加吞吐量,一个技巧是使用多个 DataCacheFactory 实例。DataCacheFactory 实例创建与服务器的连接(例如.g 如果有 3 个服务器,它将创建 3 个连接)并将来自数据缓存的所有请求多路复用到这些连接。因此,如果 put/get 量非常高,这些 TCP 连接可能会成为瓶颈。所以一种方法是创建多个 DataCacheFactory 实例,然后对它们使用操作。”
到目前为止,这里正在使用什么......该属性被调用,如果返回值不为空,则执行操作。
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 论坛上查看此问题:http: //social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f