Caching Azure-减缓多实例的Windows Azure缓存的替代方法

Caching Azure-减缓多实例的Windows Azure缓存的替代方法,caching,azure,azure-storage,Caching,Azure,Azure Storage,我们现在将现有的web应用程序移动到Azure。Azure缓存是一个很好的解决方案 Azure中的多实例是否有替代缓存机制(优于Azure缓存)?例如,在Azure存储或Azure SQL中存储缓存 谢谢你的意见 已添加 公共类AzureCacheService:ICacheService { 只读DataCacheFactory _factory=新DataCacheFactory(); 专用只读数据缓存\u缓存; 公共AzureCacheService() { _缓存=_factory.Ge

我们现在将现有的web应用程序移动到Azure。Azure缓存是一个很好的解决方案

Azure中的多实例是否有替代缓存机制(优于Azure缓存)?例如,在Azure存储或Azure SQL中存储缓存

谢谢你的意见

已添加

公共类AzureCacheService:ICacheService
{
只读DataCacheFactory _factory=新DataCacheFactory();
专用只读数据缓存\u缓存;
公共AzureCacheService()
{
_缓存=_factory.GetDefaultCache();
}
公共对象获取(字符串键)
{
返回_cache.Get(key);
}
公共无效插入(字符串键,对象对象对象)
{
如果(obj!=null)
{
_Put(key,obj,newtimespan(3,0,0));
}
}
公共无效删除(字符串键)
{
_缓存。删除(键);
}
}
***访问***
IoC.Resolve().Insert(键,MyObject);
IoC.Resolve().Remove(键);

我误解了Windows Azure缓存是基于SQL Azure的,在使用正确的资源后,我能够验证它是否确实在内存缓存中。因此,如果您决定使用SQLAzure编写自己的应用程序,这将比您现在得到的要慢得多,Azure表存储也是如此。[注释的其余部分被删除]

一般来说,WA缓存并不慢,特别是如果您打开“本地缓存”(只要数据适合内存,通常应该将延迟降低到0毫秒左右)。Memcached是另一种可能性:


您不会发现WA缓存和Memcached在性能上有多大的差异,但根据我的经验,Memcached要快一点。不过,Memcached无法击败WA缓存中的“本地缓存”功能,因为它实际上没有延迟。(它是进程数据访问,无需序列化。尽可能高效。)

您可以使用最近发布的Windows Azure缓存(预览)。与共享缓存相比,它的性能提高了5倍


链接:

“Windows Azure缓存后端基于SQL Azure。”您确定吗?我的理解是,它是建立在AppFabric缓存组件(与Windows附带的组件相同)上的,这纯粹是一个内存缓存,这是不正确的。Azure缓存基本上是Windows Appfabric缓存,这是一种内存缓存。它不涉及SQL Server。“缓存提供了一个分布式的、内存中的应用程序缓存”-您能告诉我们您看到的延迟(以及您正在使用的API、对象大小等)的具体情况吗?可能有助于确定问题所在。虽然初始启动可能需要几秒钟,但一旦建立连接,它会非常快。我通常会看到10毫秒以下的延迟。如果速度明显慢于此,那么很可能是您做错了什么。Tom&Breishl-我添加了代码。看起来您正在为每个调用创建一个新的DataCacheFactory。不要那样做。您应该创建一个DataCacheFactory,并将其保留很长一段时间,可能是应用程序的生命周期。您可以通过将该声明标记为“static”来轻松尝试。如果本地缓存在本地缓存中被命中,则在读取时,本地缓存将大大提高缓存性能。但我认为这不会提高写入性能,因为它仍然需要转到AppFabric缓存。Karthik R-是的,您可以在新的Windows Azure缓存(预览)中使用Windows Server AppFabric功能。我将保留已接受的答案,因为当时的答案是正确的。谢谢你的回答!
public class AzureCacheService : ICacheService
{
    readonly DataCacheFactory _factory = new DataCacheFactory();

    private readonly DataCache _cache;

    public AzureCacheService()
    {
        _cache = _factory.GetDefaultCache();
    }

    public object Get(string key)
    {
        return _cache.Get(key);
    }

    public void Insert(string key, object obj)
    {
        if (obj != null)
        {
            _cache.Put(key, obj, new TimeSpan(3, 0, 0));
        }
    }

    public void Remove(string key)
    {
        _cache.Remove(key);
    }
}

*** Accessing *** 
IoC.Resolve<ICacheService>().Insert(key, MyObject);

IoC.Resolve<ICacheService>().Remove(key);