首页 文章

Azure AppFabric输出缓存是否支持读取或编程无效?

提问于
浏览
2

我想知道当前在Azure AppFabric SDK中提供的输出缓存提供程序是否支持(1)中描述的内容:

通常,当get请求失败时,客户端负责从慢速存储(例如数据库,文件服务器或远程服务)加载丢失的数据并填充缓存 . 这使得请求所需的往返次数增加了三倍,并引入了竞争条件的可能性 . 启用Read-Through支持后,AppFabric本身会对缓存存储进行二次调用 . AppFabric通过抽象类DataCacheStoreProvider的自定义实现获得此功能 .

(3)的“ What's Next ”部分似乎暗示它不是:

此外,使用ASP.NET的缓存会话状态提供程序方案的成功导致请求能够将后写和后读查询与缓存相关联,以便缓存可以成为操作数据的主要方式,同时让关联的查询更新后端的数据层 . 我们将评估这些和其他功能,以便可能包含在Windows Azure AppFabric缓存的未来版本中 . 与此同时,我们鼓励您尝试当前的缓存服务实现,并告诉我们它是如何工作的 .

是否存在任何其他机制,以编程方式a)无效和b)替换缓存页面而不让它自然地通过客户端请求进行重新水合(这可能会导致负载问题,因为所有请求都会重新补充元素)?

Windows Server(4)中记录的其他差异:

ASP.NET缓存Windows Azure AppFabric提供会话状态提供程序和输出缓存提供程序 . 此提供程序与第一版Windows Server AppFabric附带的提供程序不同 . 它还提供其他功能 . 因此,请务必仔细按照Windows Azure AppFabric正确修改web.config文件的说明进行操作 . 有关更多信息,请参阅为AppFabric使用ASP.NET 4缓存提供程序 . 不可用的缓存功能Windows Azure AppFabric支持Windows Server AppFabric中可用的一部分缓存功能 . 以下列表描述了其中一些差异 . Windows Azure AppFabric缓存不支持通知通知 . 这也意味着您无法使用通知来使本地缓存无效 . 在Windows Azure AppFabric中,本地缓存只能使用基于超时的失效策略 . 有关Windows Server AppFabric中的通知功能的详细信息,请参阅缓存通知(Windows Server AppFabric缓存) . 到期和驱逐默认情况下,Windows Azure AppFabric缓存中的项目不会过期 . 这意味着当您超过最大缓存大小时,缓存中最近最少使用的项目将被逐出 . 与Windows Server AppFabric不同,无法更改此默认过期设置或值 . 但是,如果使用显式到期时间(例如10分钟)将项目添加到缓存,则缓存将遵循此到期值 . 这可以通过Add和Put方法的各种重载来完成 . 请注意,ASP.NET提供程序会自动使用这些重载来为会话状态和输出缓存提供显式超时 . Windows Azure AppFabric缓存不支持禁用缓存上的逐出 . 在记忆压力下,物品总是可以被驱逐 . 应将应用程序设计为预测项目可能丢失并需要随时重新加载 . 如果缓存对于应用程序要求而言太小,则可以从Windows Azure平台管理门户动态增加缓存 . 有关Windows Server AppFabric中的到期和逐出的详细信息,请参阅过期和逐出(Windows Server AppFabric缓存) . 高可用性Windows Azure AppFabric缓存不支持高可用性功能 . 有关Windows Server AppFabric中的高可用性的详细信息,请参阅高可用性(Windows Server AppFabric缓存) . 区域和标记Windows Azure AppFabric缓存不支持用户创建的区域或基于标记的搜索 . API支持在大多数情况下,您可以使用相同的API编写使用Windows Azure AppFabric或Windows Server AppFabric的缓存客户端 . 由于两者之间的差异,有一些例外解决方案 . 有关可用于Windows Azure AppFabric缓存客户端的API的详细信息,请参阅API参考(Windows Azure AppFabric缓存) .

References:

(1)Windows Server AppFabric增加了Read-Through和Write-Behind支持:http://www.infoq.com/news/2011/08/AppFabric-CTP

(2)ASP.NET 4(VS 2010和.NET 4.0系列)的可扩展输出缓存:http://weblogs.asp.net/scottgu/archive/2010/01/27/extensible-output-caching-with-asp-net-4-vs-2010-and-net-4-0-series.aspx

(3)介绍Windows Azure AppFabric缓存服务:
http://msdn.microsoft.com/en-us/magazine/gg983488.aspx

(4)内部缓存和 Cloud 中的缓存差异:
http://msdn.microsoft.com/en-us/library/gg185678.aspx

1 回答

  • 0

    正如您引用的文档所示,无法使用Windows Azure共享缓存服务(以前称为Windows Azure AppFabric缓存)使本地缓存无效 . 这是因为该服务不支持通知 . 如果未对该服务使用本地缓存选项,则可以通过显式删除缓存项来使其无效 . 这将把它从服务中的分布式缓存中删除,然后请求它的所有实例都不会得到任何东西 .

    至于替换缓存页面,我相信你可以通过直接更新缓存来做到这一点;但是,考虑到从缓存中删除某些内容时会产生的因素数量,您可能无法100%保证页面最终不会因压力而失败,无论如何都会发生竞争 .

    如果您想要更多地控制缓存,我强烈建议您查看新的Windows Azure专用缓存预览 . 它会在预览中出现,因此您可能不希望在 生产环境 工作中冒险,但它会让您对缓存有更多的控制权 .

相关问题