4

我已成功开始使用 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);
    }
}

我现在很确定这不是那么聪明的想法,我应该通过一个单例获取 DataCache 对象,其中 DataCacheFactory 对象只创建一次。但是该对象将如何在请求之间生存?以及如何在 Azure 上使用 > 1 个实例?

希望所有这些都是有道理的,并且比我有更多经验(3 小时)的人可以帮助我。

4

1 回答 1

6

单例对象存在于应用程序范围内。只需在全局静态级别上声明您的私有 DataCache 对象,提供一个属性 Get,如果该对象为空则实例化该对象,如果该对象不为空则返回该对象。

这样,每次应用程序回收时,您只需支付一次检测配置和缓存连接的成本。

每个实例都会实例化自己的 DataCache 对象,这没问题。

存储缓存的实际数据不存储在本地计算机的内存中,而是存储在 Azure 的分布式且超高速的专用缓存服务器中。

于 2012-02-23T17:54:32.923 回答