从 Shared Caching 迁移到 Azure 托管缓存服务
重要
Microsoft 建议所有新开发使用 Azure Redis 缓存。 有关选择 Azure 缓存产品/服务的当前文档和指南,请参阅 哪个 Azure 缓存产品/服务适合我?
可以将使用Microsoft Azure 共享缓存的应用程序迁移到托管缓存服务,只需对应用程序进行最少的更改即可完成。 由于托管缓存服务使用与共享缓存相同的 API,因此可以使用共享缓存访问缓存的现有代码重复使用托管缓存服务。 本主题演示如何进行必要的配置和应用程序更改,以迁移共享缓存应用程序以使用托管缓存服务。
注意
Azure 共享缓存于 2014 年 9 月停用。 建议迁移到 Azure Redis 缓存,但如果想要移动应用程序,无需更改代码,则可以移动到托管缓存服务。 本主题介绍如何迁移到 托管缓存服务;有关迁移到 Azure Redis 缓存的指导,请参阅从 共享缓存 迁移到 Azure Redis 缓存 (预览版) 。
迁移步骤
以下部分介绍了迁移Microsoft Azure 共享缓存应用程序以使用托管缓存服务所需的步骤。
选择缓存产品/服务
创建缓存
配置缓存
配置缓存客户端
删除 Shared Caching 配置
使用缓存 NuGet 程序包配置缓存客户端
迁移 ASP.NET 会话和页面输出缓存
选择缓存产品/服务
以下三种产品/服务中提供了托管缓存服务。
基本 - 缓存大小在 128MB 到 1GB 之间,以 128MB 为增量,具有一个默认命名缓存
标准版 - 大小介于 1GB 到 10GB、增量为 1GB 的缓存,支持通知、高可用性和多达十个命名缓存
高级 - 缓存大小在 5GB 到 150GB 之间,以 5GB 为增量,支持通知、高可用性以及最多 10 个命名缓存
注意
各款产品的定价和功能都有所不同。 有关详细信息,请参阅 Azure 托管缓存服务缓存服务定价常见问题解答和缓存产品/服务。 此迁移指南的以下“配置缓存”部分还提供了其他详细信息。
所有三个托管缓存服务产品/服务都提供了共享缓存的所有缓存功能,因此迁移的起点是选择与共享缓存帐户大小匹配的托管缓存服务缓存产品/服务。 部署应用程序后,可以根据应用程序的要求监视缓存的性能并纵向扩展或缩减。 有关监视性能和缩放的详细信息,请参阅监视 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:\>
配置缓存
托管缓存服务支持命名缓存,从而灵活地为不同的数据集配置不同的缓存选项。 每个缓存都有一个“默认”的命名缓存,在标准版和高级版缓存产品中,还可以配置另外九个命名缓存。 每个命名缓存都有各自对应的设置,如高可用性、通知以及自定义的逐出策略和过期策略。 命名缓存设置在管理门户中缓存的“配置”选项卡上进行配置。
下表列出了托管缓存服务和共享缓存之间的缓存设置之间的差异。
功能 | 托管缓存服务支持 | 共享缓存支持 |
---|---|---|
名称 |
配置“默认”缓存,在标准版和高级版缓存产品中,还可以根据需要配置另外九个命名缓存。 |
仅默认缓存。 |
高可用性 |
为缓存中的项目提供高可用性。 如果因为故障而导致项丢失,缓存中的项仍有备份副本可供使用。 高可用性在标准缓存和高级版缓存产品/服务中可用,在基本缓存产品/服务中不可用。 有关详细信息,请参阅适用于 Azure 托管缓存服务的缓存产品/服务和Azure 托管缓存服务的高可用性。 |
没有高可用性。 |
通知 |
通知功能允许应用程序在缓存中发生各种缓存操作时接收异步通知。 标准版和高级版缓存产品中都提供通知,基础版缓存产品中不提供通知。 有关详细信息,请参阅 Azure 托管缓存服务缓存产品/服务和Azure 托管缓存服务通知。 |
不支持。 |
逐出策略 |
选项已启用,该选项使用 LRU (最近使用的) 算法来确定要逐出或禁用的项目。 默认值为“已启用”。 |
仅 LRU。 |
时间(分钟) |
缓存中的项目的默认过期时间是 10 分钟,但这是可以配置的。 还可以使用 “添加 ”和 “放置 ”的重载指定添加到缓存中的各个项的过期时间。 “时间(分钟)”与“过期策略”共同决定项目的过期时间。 |
默认过期时间是 24 小时,并且是不可配置的。 可以在将项添加到缓存时使用 “添加 ”和 “放置 ”重载配置添加到缓存中的单个项的过期时间。 |
过期策略 |
有三种过期策略:“从不”、“绝对”和“可调”。 如果指定了“绝对”,则当项目添加到缓存中时,由“时间(分钟)”指定的过期时间间隔便开始计时。 如果指定了“滑动”,则每次访问缓存中的项目时,时间间隔将被重置。 如果指定了“无”,则“时间(分钟)”必须设置为“0”,项目将不会过期。 默认值为“绝对”。 有关详细信息,请参阅 Azure 托管缓存服务的过期和逐出。 |
过期策略是绝对的。 项目添加到缓存中时,过期时间间隔开始计时。 |
若要将托管缓存服务设置配置为最匹配默认共享缓存设置,请使用以下设置。
将“过期策略”设置为“绝对”
将“时间(分钟)”设置为“1440”
将“通知”设置为“已禁用”(在标准版和高级版缓存产品中可配置,基础版缓存产品中则始终禁用)
高可用性设置为“已禁用” (“可配置标准缓存和高级版缓存产品/服务,始终为基本缓存产品/服务禁用)
将“逐出”设置为“已启用”
配置缓存客户端
创建和配置缓存后,下一步是添加必要的配置和引用,以便缓存客户端可以访问缓存。 托管缓存服务支持以下客户端。
Azure 网站
Azure 云服务 Web 角色和辅助角色
Azure 虚拟机
若要配置缓存客户端,请针对每个缓存客户端执行以下步骤。
删除 Shared Caching 配置
使用缓存 NuGet 程序包配置缓存客户端
删除 Shared Caching 配置
在为托管缓存服务配置客户端应用程序之前,必须删除现有的共享缓存配置和程序集引用。 如果使用 共享缓存 NuGet 包配置了共享缓存,则可以通过卸载共享缓存 NuGet包来删除配置;否则必须手动删除该配置。
卸载 Shared Caching NuGet 程序包
手动删除 Shared Caching 配置
卸载 Shared Caching NuGet 程序包
若要卸载共享缓存 NuGet包,请右键单击解决方案资源管理器中的客户端项目,然后选择“管理NuGet包”。 选择“已安装的程序包”节点,然后在“搜索已安装的程序包”框中键入“Caching”。 选择“Azure Shared Caching”,单击“卸载”,然后单击“关闭”。
注意
如果列表中没有Microsoft Azure 共享缓存 NuGet包,请单击“关闭”,然后按照“手动删除共享缓存配置”中的步骤操作。
卸载共享缓存 NuGet包会删除客户端应用程序或客户端应用程序中的app.config
web.config
共享缓存程序集和共享缓存项。 由于卸载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"> <hosts> <host name="MyCacheNamespace.cache.windows.net" cachePort="22233" /> </hosts> <securityProperties mode="Message"> <messageSecurity authorizationInfo="Your authorization token will be here."> </messageSecurity> </securityProperties> </dataCacheClient> </dataCacheClients>
删除共享缓存配置后,可以使用Caching NuGet包部分配置缓存客户端,如以下配置缓存客户端中所述。
手动删除 Shared Caching 配置
若要手动删除共享缓存配置,必须从或web.config
中删除app.config
共享缓存程序集引用和共享缓存配置。
若要删除共享缓存程序集引用,请在解决方案资源管理器中选择缓存客户端项目,然后展开“引用”文件夹。 对于以下列表中的每个程序集,可在“解决方案资源管理器”中的“引用”文件夹内右键单击相应的程序集,然后选择“删除”。 如果客户端是一个 Web 项目,请同时删除 Microsoft.Web.DistributedCache。
Microsoft.ApplicationServer.Caching.Client
Microsoft.ApplicationServer.Caching.Core
Microsoft.WindowsFabric.Common
Microsoft.WindowsFabric.Data.Common
若要删除共享缓存配置,请打开web.config
缓存客户端项目或app.config
删除以下两项。
从
dataCacheClients
元素中删除configSections
条目。 请勿删除整个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> <dataCacheClient name="default"> <hosts> <host name="MyCacheNamespace.cache.windows.net" cachePort="22233" /> </hosts> <securityProperties mode="Message"> <messageSecurity authorizationInfo="Your authorization token will be here."> </messageSecurity> </securityProperties> </dataCacheClient> </dataCacheClients>
删除这些项后,可以遵照下一部分中的步骤来配置缓存客户端。
使用缓存 NuGet 程序包配置缓存客户端
托管缓存服务提供了一个NuGet包,用于添加必要的配置和程序集引用,以允许缓存客户端访问缓存。
重要
在使用 托管缓存服务 NuGet 包配置缓存客户端之前,请确保从客户端项目或app.config
客户端项目中完全删除web.config
共享缓存配置,如上一部分所述。
重要
执行这些步骤需要安装 NuGet Package Manager(2.6.40627.9000 或更高版本)。 若要安装最新的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>-->
在管理门户中,通过从缓存仪表板单击“管理密钥”可查看身份验证密钥。
警告
必须正确配置这些设置,否则,客户端将无法访问缓存。
对于云服务项目,托管缓存服务 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
注意
托管缓存服务和共享缓存共享相同的 API,尽管程序集名称相同,但程序集本身不同且位于不同的位置。 托管缓存服务 NuGet包将删除共享缓存程序集引用,并添加正确的托管缓存服务程序集引用。 托管缓存服务程序集位于C:\Program Files\Microsoft SDKs\Azure\.NET SDK[SDK Version]\ref\Caching
文件夹中。
迁移 ASP.NET 会话和页面输出缓存
将 ASP.NET Web 项目从Microsoft Azure 共享缓存迁移到托管缓存服务,如配置缓存客户端中所述,只需进行最少的更改才能在缓存中存储 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 托管缓存服务的页面输出缓存提供程序