从角色中缓存迁移到 Azure 托管缓存服务
重要
Microsoft 建议所有新开发使用 Azure Redis 缓存。 有关选择 Azure 缓存产品/服务的当前文档和指南,请参阅 哪个 Azure 缓存产品/服务适合我?
可以将使用 In-Role Cache 的 Microsoft Azure 缓存应用程序迁移到 Azure 托管缓存服务,只需对应用程序进行最少的更改即可完成。 由于托管缓存服务使用与In-Role缓存相同的 API,因此可以使用In-Role缓存访问缓存的现有代码与托管缓存服务重复使用。 本主题演示如何进行必要的配置和应用程序更改,以迁移In-Role缓存应用程序以使用托管缓存服务。
迁移步骤
以下部分介绍迁移In-Role缓存应用程序以使用托管缓存服务所需的步骤。
选择缓存产品/服务
创建缓存
配置缓存
取消配置角色中缓存群集
配置缓存客户端
卸载角色中缓存 NuGet 程序包
使用缓存 NuGet 程序包配置缓存客户端
迁移 ASP.NET 会话和页面输出缓存
选择缓存产品/服务
以下三种产品/服务中提供了托管缓存服务。
基本 - 缓存大小在 128MB 到 1GB 之间,以 128MB 为增量,具有一个默认命名缓存
标准版 - 大小介于 1GB 到 10GB、增量为 1GB 的缓存,支持通知、高可用性和多达十个命名缓存
高级 - 缓存大小在 5GB 到 150GB 之间,以 5GB 为增量,支持通知、高可用性以及最多 10 个命名缓存
注意
各款产品的定价和功能都有所不同。 有关详细信息,请参阅 Azure 托管缓存服务缓存服务定价常见问题解答和缓存产品/服务。 此迁移指南的以下 “配置缓存 ”部分还提供了其他详细信息。
In-Role缓存的所有缓存功能都可用于托管缓存服务的不同缓存产品/服务。 如果你的应用程序使用通知,则应选择标准版或基础版缓存产品。 如果你的缓存启用了高可用性,则应选择高级版缓存产品。 迁移的起点是选择具有应用程序所需的缓存功能的托管缓存服务缓存产品/服务,并符合In-Role缓存应用程序的容量需求。
部署应用程序后,可以根据应用程序的要求监视缓存的性能并纵向扩展或缩减。 有关监视性能和缩放的详细信息,请参阅监视 Azure 托管缓存服务和缩放 Azure 托管缓存服务缓存。
创建缓存
托管缓存服务中的缓存实例是使用 PowerShell 脚本创建的。
重要
使用 PowerShell cmdlet 创建托管缓存服务实例后,可在 Azure 管理门户中查看和配置该实例。
创建托管缓存服务实例
打开 Azure PowerShell 命令窗口。
注意
有关安装和使用 Azure PowerShell 的说明,请参阅如何安装和配置 Azure PowerShell。
调用
Add-AzureAccount
cmdlet,然后输入与你的帐户关联的电子邮件地址和密码。注意
如果使用帐户证书配置了 Azure PowerShell,则可以跳过此步骤。 有关使用 Azure 帐户连接 Azure PowerShell 的详细信息,请参阅如何安装和配置 Azure PowerShell。
调用
New-AzureManagedCache
cmdlet 并指定名称、区域、缓存产品和缓存大小。 在以下示例中,基本版 128MB 缓存是使用名称contosocache
在South Central US
地理区域中创建的。New-AzureManagedCache -Name contosocache -Location "South Central US" -Sku Basic -Memory 128MB
注意
有关创建缓存时可供使用的参数和值的完整列表,请参阅 New-AzureManagedCache cmdlet 文档。
调用 PowerShell cmdlet 后,创建缓存可能需要数分钟时间。 创建缓存后,新缓存的状态为 “正在运行 ”状态,可供默认设置使用,可在 Azure 管理门户中查看和配置。
可以在 Azure PowerShell 窗口中监视创建进度。 缓存可供使用后,
New-AzureManagedCache
cmdlet 将显示缓存信息,如以下示例中所示。PS C:\> Add-AzureAccount VERBOSE: Account "user@domain.com" has been added. VERBOSE: Subscription "MySubscription" is selected as the default subscription. VERBOSE: To view all the subscriptions, please use Get-AzureSubscription. VERBOSE: To switch to a different subscription, please use Select-AzureSubscription. PS C:\> New-AzureManagedCache -Name contosocache -Location "South Central US" -Sku Basic -Memory 128MB VERBOSE: Intializing parameters... VERBOSE: Creating prerequisites... VERBOSE: Verify cache service name... VERBOSE: Creating cache service... VERBOSE: Waiting for cache service to be in ready state... Name : contosocache Location : South Central US State : Active Sku : Basic Memory : 128MB PS C:\>
配置缓存
In-Role缓存和托管缓存服务支持命名缓存,从而灵活地为不同的数据集配置不同的缓存选项。 每个托管缓存服务缓存都有默认的命名缓存,在标准缓存和高级版缓存产品/服务中,最多可以配置 9 个其他命名缓存。 每个命名缓存都有各自对应的设置,如高可用性、通知以及自定义的逐出策略和过期策略。 命名缓存设置在管理门户中缓存的“配置”选项卡上进行配置。
虽然In-Role缓存和托管缓存服务具有相同的缓存功能,但下表中列出了细微的差异。
功能 | 托管缓存服务支持 | In-Role缓存支持 |
---|---|---|
名称 |
配置“默认”缓存,在标准版和高级版缓存产品中,还可以根据需要配置另外九个命名缓存。 |
配置“默认”缓存,也可以配置更多命名缓存。 |
高可用性 |
高可用性在标准缓存和高级版缓存产品/服务中可用,在基本缓存产品/服务中不可用。 有关详细信息,请参阅 Azure 托管缓存服务的缓存产品/服务。 |
可为所有In-Role缓存拓扑启用高可用性。 |
通知 |
标准版和高级版缓存产品中都提供通知,基础版缓存产品中不提供通知。 有关详细信息,请参阅 Azure 托管缓存服务的缓存产品/服务。 |
可为所有In-Role缓存拓扑启用通知。 |
逐出策略 |
选项已启用,该选项使用 LRU (最近使用的) 算法来确定要逐出或禁用的项目。 默认值为“已启用”。 |
选项包括 LRU(最近一次使用)或“无”。 默认值为 LRU。 |
时间(分钟) |
在托管缓存服务中,该设置名为 Time (min) 。 |
在In-Role缓存中,该设置命名为 生存时间 (分钟) 。 |
过期策略 |
此设置名为 “过期策略 ”,它具有三个可能的值: 永不、 绝对和 滑动 ,对应于In-Role缓存中的 “过期策略 ”设置。 |
此设置名为“过期策略”,它具有三个可能的值:“无”、“绝对”和“滑动窗口”。 |
若要从In-Role缓存迁移到托管缓存服务,请在新的托管缓存服务缓存中从In-Role缓存缓存群集重新创建所有命名缓存。
取消配置角色中缓存群集
配置新的托管缓存服务缓存后,下一步是从托管In-Role缓存的角色中删除缓存。 这些步骤因In-Role缓存的缓存群集拓扑而异。
专用角色缓存群集
共存角色缓存群集
专用角色缓存群集
若要删除专用角色缓存群集,必须从Visual Studio解决方案和云服务项目中的“角色”文件夹中删除缓存辅助角色项目。
在“解决方案资源管理器”中的云服务项目“角色”文件夹中右键单击缓存辅助角色,然后选择“删除。
在“解决方案资源管理器”中右键单击辅助角色项目,然后选择“删除”。
共存角色缓存群集
要禁用 Web 或辅助角色中的共存角色缓存,必须取消选中角色属性中“缓存”选项卡上的“缓存”设置。
在“解决方案资源管理器”中右键单击云服务项目中的角色,然后选择“属性”。
切换到“缓存”选项卡,并取消选中“启用缓存”复选框,然后按 CTRL+S 保存。
配置缓存客户端
创建和配置缓存后,下一步是添加必要的配置和引用,以便缓存客户端可以访问缓存。 托管缓存服务支持以下客户端。
Azure 网站
Azure 云服务 Web 角色和辅助角色
Azure 虚拟机
注意
如果In-Role缓存项目已使用最新的 Azure SDK,则只需跳过以下步骤并遵循更新缓存客户端配置以使用缓存服务的过程来更新缓存客户端配置。
如果In-Role缓存项目使用的是 Azure SDK 1.8 - 2.0,则需要删除Caching NuGet包,删除剩余的缓存客户端配置,然后安装当前 2.1) 的最新 Azure SDK (。 升级 SDK 后,安装并配置最新的 Caching NuGet 程序包。 若要配置缓存客户端,请针对每个缓存客户端执行以下步骤。
卸载角色中缓存 NuGet 程序包
使用缓存 NuGet 程序包配置缓存客户端
卸载角色中缓存 NuGet 程序包
必须先删除现有的In-Role缓存配置和程序集引用,然后才能为托管缓存服务配置客户端应用程序。 可通过卸载 Caching NuGet 程序包来完成。
若要卸载In-Role缓存NuGet包,请右键单击解决方案资源管理器中的客户端项目,然后选择“管理NuGet包”。 选择“已安装的程序包”节点,然后在“搜索已安装的程序包”框中键入“Caching”。 选择Windows Azure Caching,单击“卸载”,然后单击“关闭”。
注意
在以下屏幕快照中,NuGet 程序包版本为“2.1.0.0”。 如果你的程序包版本为此版本或更高版本,则可跳过此步。 仅当NuGet包版本为 1.8 或2.0 时,才需要执行此步骤。
卸载In-Role缓存NuGet包会删除In-Role缓存程序集和客户端应用程序中的app.config
web.config
In-Role缓存项。 由于卸载NuGet包时可能无法删除某些自定义设置,请打开web.config
或app.config
确保完全删除以下元素。
确保已从
configSections
元素中删除dataCacheClients
条目。 请勿删除整个configSections
元素,只需删除dataCacheClients
条目(如果存在)。<configSections> <!-- Existing sections omitted for clarity. --> <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" /> </configSections>
确保已删除
dataCacheClients
节。dataCacheClients
节将类似于以下示例。<dataCacheClients> <dataCacheClient name="default" channelOpenTimeout="0"> <autoDiscover isEnabled="true" identifier="CacheWorker" /> </dataCacheClient> </dataCacheClients>
删除In-Role缓存配置后,可以使用Caching NuGet包部分配置缓存客户端,如以下配置缓存客户端中所述。
使用缓存 NuGet 程序包配置缓存客户端
托管缓存服务提供了一个NuGet包,用于添加必要的配置和程序集引用,以允许缓存客户端访问缓存。
重要
在使用 托管缓存服务 NuGet 包配置缓存客户端之前,请确保In-Role缓存配置已完全从web.config
客户端角色或app.config
客户端角色中删除,如上一部分所述。
重要
执行这些步骤需要安装最新的 NuGet 程序包管理器(版本 2.2.* 或更高版本)。 若要安装最新的NuGet 程序包管理器,请参阅NuGet 程序包管理器。
若要使用托管缓存服务 NuGet包,请右键单击解决方案资源管理器中的客户端项目,然后选择“管理NuGet包”。
选择“Azure Caching”,单击“安装”,然后单击“我接受”。 将程序包安装到客户端项目后,请单击“关闭”以关闭“管理 NuGet 程序包”窗口。
注意
如果“Azure Caching”未出现在列表中,请在“联机搜索”文本框中键入“WindowsAzure.Caching”。
将托管缓存服务 NuGet包安装到客户端项目中时,它会添加所需的配置和程序集引用,以便客户端应用程序可以访问缓存。
在该项目的 web.config
或 app.config
中,将添加几个项目。
两个节将添加到
configSections
,即dataCacheClients
和cacheDiagnostics
。<!-- Non-cache sections omitted for space --> <configSections> <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" /> <section name="cacheDiagnostics" type="Microsoft.ApplicationServer.Caching.AzureCommon.DiagnosticsConfigurationSection, Microsoft.ApplicationServer.Caching.AzureCommon" allowLocation="true" allowDefinition="Everywhere" /> </configSections>
dataCacheClients
节将添加到configuration
节。<!-- Non-cache sections omitted for space --> <dataCacheClients> <dataCacheClient name="default"> <!--To use the in-role flavor of Azure Caching, set identifier to be the cache cluster role name --> <!--To use the Azure Caching Service, set identifier to be the endpoint of the cache cluster --> <autoDiscover isEnabled="true" identifier="[Cache role name or Service Endpoint]" /> <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />--> <!--Use this section to specify security settings for connecting to your cache. This section is not required if your cache is hosted on a role that is a part of your cloud service. --> <!--<securityProperties mode="Message" sslEnabled="false"> <messageSecurity authorizationInfo="[Authentication Key]" /> </securityProperties>--> </dataCacheClient> </dataCacheClients>
将 [缓存角色名称或服务终结点] 替换为管理门户中缓存仪表板中显示的终结点 URL。
在此示例中,缓存名为 applicationcache,终结点 URL applicationcache.cache.windows.net。<autoDiscover isEnabled="true" identifier="applicationcache.cache.windows.net" />
取消注释 securityProperties 部分,并将 [身份验证密钥] 替换为主身份验证密钥。
<!--Use this section to specify security settings for connecting to your cache. This section is not required if your cache is hosted on a role that is a part of your cloud service. --> <!--<securityProperties mode="Message" sslEnabled="false"> <messageSecurity authorizationInfo="[Authentication Key]" /> </securityProperties>-->
在管理门户中,通过从缓存仪表板单击“管理密钥”可查看身份验证密钥。 有关访问密钥和保护与
sslEnabled
属性的缓存通信的详细信息,请参阅 Azure 托管缓存服务的安全模型。警告
必须正确配置这些设置,否则,客户端将无法访问缓存。
对于云服务项目,托管缓存服务 NuGet包还会将 ClientDiagnosticLevel 设置添加到ConfigurationSettings
缓存客户端角色中ServiceConfiguration.cscfg
。 以下示例是WebRole1
包含 ClientDiagnosticLevel 1 的文件的节ServiceConfiguration.cscfg
,该文件是默认的 ClientDiagnosticLevel。
<Role name="WebRole1">
<Instances count="1" />
<ConfigurationSettings>
<!-- Other settings omitted for space... -->
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" value="1" />
</ConfigurationSettings>
</Role>
注意
有关缓存诊断级别的详细信息,请参阅关于 Azure 托管缓存服务 的 ClientDiagnosticLevel。
除了添加所需的配置外,托管缓存服务 NuGet包还添加了以下程序集引用。
Microsoft.ApplicationServer.Caching.Client.dll
Microsoft.ApplicationServer.Caching.Core.dll
Microsoft.ApplicationServer.Caching.AzureCommon.dll
Microsoft.ApplicationServer.Caching.AzureClientHelper.dll
Microsoft.WindowsFabric.Common.dll
Microsoft.WindowsFabric.Data.Common.dll
如果项目是 Web 项目,则还会添加以下程序集引用。
- Microsoft.Web.DistributedCache.dll
注意
托管缓存服务和In-Role缓存共享相同的 API,尽管程序集名称相同,但程序集本身不同,并且位于不同的位置。 托管缓存服务 NuGet包将删除In-Role缓存程序集引用,并添加正确的托管缓存服务程序集引用。 托管缓存服务程序集位于C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.1\ref\Caching
文件夹中。
更新缓存客户端配置以便使用缓存服务
如果In-Role缓存项目已使用最新的 Azure SDK,则只需更新缓存客户端配置以指向新的托管缓存服务缓存。
打开缓存客户端项目的 web.config 或 app.config,找到
dataCacheClients
部分。<!-- Non-cache sections omitted for space --> <dataCacheClients> <dataCacheClient name="default"> <!--To use the in-role flavor of Windows Azure Caching, set identifier to be the cache cluster role name --> <!--To use the Windows Azure Caching Service, set identifier to be the endpoint of the cache cluster --> <autoDiscover isEnabled="true" identifier="MyCacheWorkerRole" /> <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />--> <!--Use this section to specify security settings for connecting to your cache. This section is not required if your cache is hosted on a role that is a part of your cloud service. --> <!--<securityProperties mode="Message" sslEnabled="false"> <messageSecurity authorizationInfo="[Authentication Key]" /> </securityProperties>--> </dataCacheClient> </dataCacheClients>
在本
autoDiscover
部分中,将In-Role缓存群集的角色名称替换为属性中identifier
托管缓存服务缓存的终结点 URL 的名称。 终结点 URL 显示在管理门户中的缓存仪表板上。
在此示例中,缓存名为 applicationcache,终结点 URL applicationcache.cache.windows.net。<autoDiscover isEnabled="true" identifier="applicationcache.cache.windows.net" />
取消注释 securityProperties 部分,并将 [身份验证密钥] 替换为身份验证密钥。
<!--Use this section to specify security settings for connecting to your cache. This section is not required if your cache is hosted on a role that is a part of your cloud service. --> <!--<securityProperties mode="Message" sslEnabled="false"> <messageSecurity authorizationInfo="[Authentication Key]" /> </securityProperties>-->
在管理门户中,通过从缓存仪表板单击“访问密钥”可以查看身份验证密钥。
迁移 ASP.NET 会话和页面输出缓存
ASP.NET Web 项目从In-Role缓存迁移到托管缓存服务,如配置缓存客户端中所述,只需进行少量更改才能在缓存中存储 ASP.NET 会话状态或页面输出Caching。 若要启用在缓存中存储 ASP.NET 会话状态,请向 system.web
中的 web.config
添加以下节。
<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
<providers>
<add name="AppFabricCacheSessionStoreProvider" type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache" cacheName="default" useBlobMode="true" dataCacheClientName="default" />
</providers>
</sessionState>
注意
如果已将 ASP.NET Web 角色配置为使用会话状态提供程序进行缓存,则此部分已存在,且无需更改。
更新 cacheName
以指定用于保存会话状态的缓存。 使用 default
可指定默认缓存。
若要启用在缓存中存储页面输出缓存,请将以下节添加到 system.web
中。
<caching>
<outputCache defaultProvider="DistributedCache">
<providers>
<add name="DistributedCache" type="Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" cacheName="default" dataCacheClientName="default" />
</providers>
</outputCache>
</caching>
注意
如果已将 ASP.NET Web 角色配置为使用输出缓存提供程序进行缓存,则此部分已存在,并且不需要任何更改。
更新 cacheName
以指定用于保存会话状态的缓存。 使用 default
可指定默认缓存。
将 OutputCache
指令添加到你希望为其缓存输出的每个页面。
<%@ OutputCache Duration="60" VaryByParam="*" %>
在此示例中,缓存的页面数据在缓存中保留 60 秒,并且每个参数组合会缓存不同版本的页面。 有关可用选项的详细信息,请参阅 OutputCache 指令。
另请参阅
概念
Azure 托管缓存服务的本地缓存产品
Azure 托管缓存服务的容量计划
Azure 托管缓存服务的会话状态提供程序
Azure 托管缓存服务的页面输出缓存提供程序