我已经成功开始使用Azure AppFabric缓存服务,但我不确定创建DataCacheFactory对象的最佳实践方法是什么。现在我为每次调用缓存创建它,但显然这不是理想的做法...
一些建议要求单身人士。但我不确定我是否理解这将如何实现(不是实际的Singleton类,而是如何将它们组合在一起)。
今天我有一个使用Ninject为我创建的CacheProvider类,我可以在其中执行Get / Put / Remove操作。对于这些方法中的每一个,我创建DataCacheFactory对象,然后调用.GetDefaultCache()来获取DataCache对象,我分别调用Put / Get / Remove。我这样做的方法如下:
private T Cache<T>(Func<DataCache, T> cacheAction)
{
using (DataCacheFactory dataCacheFactory = new DataCacheFactory())
{
DataCache dataCache = dataCacheFactory.GetDefaultCache();
return cacheAction(dataCache);
}
}
我现在非常确定这不是那么聪明的想法,我应该通过Singleton获取DataCache对象,其中DataCacheFactory对象只创建一次。但是这个对象如何在请求之间存活?那怎么用&gt; Azure上的1个实例?
希望这一切都有道理,而且比我更有经验的人(3小时)可以帮助我。
答案 0 :(得分:6)
Singleton对象存在于应用程序范围内。只需在全局静态级别声明私有DataCache对象,提供属性Get,如果该对象为null,则实例化该对象;如果该对象不为null,则返回该对象。
这样,每次应用程序回收时,您只需支付一次仪表配置和连接缓存的费用。
每个实例都将实例化自己的DataCache对象,这没关系。
存储缓存的实际数据不会存储在本地计算机的内存中,而是存储在Azure的分布式和超快速的专用缓存服务器中。