销售电话: 1-800-867-1380

从角色中缓存迁移到 Azure 托管缓存服务

更新时间: 2014年9月

note备注
有关为你的应用程序选择合适的 Azure 缓存产品/服务的指导,请参阅 哪种 Azure Cache 产品/服务适合我?

将使用角色中缓存的 Microsoft Azure Cache 应用程序迁移到 Azure 托管缓存服务只需对应用程序进行少量的更改即可完成。由于托管缓存服务与角色中缓存使用相同的 API,因此,托管缓存服务可重用角色中缓存来访问缓存的现有代码。本主题介绍如何进行必要的配置和应用程序更改来迁移 角色中缓存 应用程序,以便使用托管缓存服务。

托管缓存服务包含以下三款产品。

  • 基础版 - 大小介于 128MB 到 1GB、增量为 128MB 的缓存,带默认的命名缓存

  • 标准版 - 大小介于 1GB 到 10GB、增量为 1GB 的缓存,支持通知和多达十个命名缓存

  • 高级版 - 大小介于 5GB 到 150GB、增量为 5GB 的缓存,支持通知、高可用性和多达十个命名缓存

note备注
各款产品的定价和功能都有所不同。有关详细信息,请参阅缓存服务定价常见问题解答Azure 托管缓存服务的本地缓存产品。本迁移指南的以下部分Configure the Cache中还提供了更多详细信息。

托管缓存服务的不同缓存产品中都提供角色中缓存的所有缓存功能。如果你的应用程序使用通知,则应选择标准版或基础版缓存产品。如果你的缓存启用了高可用性,则应选择高级版缓存产品。迁移过程从选取具有你的应用程序所需的缓存功能、符合你的角色中缓存应用程序容量需求的托管缓存服务缓存产品开始。

部署应用程序后,你可以监视缓存的性能并根据应用程序的要求增大或缩小缓存。有关性能监视和缩放的详细信息,请参阅监视 Azure 托管缓存服务为 Azure 托管缓存服务缩放缓存

托管缓存服务中的缓存使用 PowerShell 脚本进行创建。

Important重要提示
使用 PowerShell cmdlet 创建某个托管缓存服务实例后,可以在 Azure 管理门户中查看和配置该实例。

  1. 打开 Azure PowerShell 命令窗口。

    note备注
    有关安装和使用 Azure PowerShell 的说明,请参阅 How to install and configure Azure PowerShell(如何安装和配置 Azure PowerShell)。

  2. 调用 Add-AzureAccount cmdlet,然后输入与你的帐户关联的电子邮件地址和密码。

    note备注
    如果你使用你的帐户证书配置了 Azure PowerShell,则可以跳过此步骤。有关使用 Azure 帐户连接 Azure PowerShell 的详细信息,请参阅 How to install and configure Azure PowerShell(如何安装和配置 Azure PowerShell)。

  3. 调用 New-AzureManagedCache cmdlet 并指定名称、区域、缓存产品和缓存大小。在以下示例中,基本版 128MB 缓存是使用名称 contosocacheSouth Central US 地理区域中创建的。

    New-AzureManagedCache -Name contosocache -Location "South Central US" -Sku Basic -Memory 128MB
    
    note备注
    有关创建缓存时可供使用的参数和值的完整列表,请参阅 New-AzureManagedCache cmdlet 文档。

  4. 调用 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:\>
    

角色中缓存 和托管缓存服务都支持命名缓存,便于你为不同的数据集灵活地配置不同的缓存选项。每个托管缓存服务缓存都有一个“默认”的命名缓存,在标准版和高级版缓存产品中,还可以配置另外九个命名缓存。每个命名缓存都有各自对应的设置,如高可用性、通知以及自定义的逐出策略和过期策略。命名缓存设置在管理门户中缓存的“配置”选项卡上进行配置。

Windows Azure 缓存服务中的已命名缓存

虽然角色中缓存和托管缓存服务的缓存功能相同,但二者之间也存在一些细微的差别,如下表所列。

 

功能 托管缓存服务支持 角色中缓存支持

Name

配置“默认”缓存,在标准版和高级版缓存产品中,还可以根据需要配置另外九个命名缓存。

配置“默认”缓存,也可以配置更多命名缓存。

高可用性

仅在高级缓存产品/服务中提供高可用性,在基本或标准缓存产品/服务中不提供该功能。有关详细信息,请参阅 TechNet 上的 Azure 托管缓存服务的本地缓存产品.

可对所有角色中缓存拓扑启用高可用性。

通知

标准版和高级版缓存产品中都提供通知,基础版缓存产品中不提供通知。有关详细信息,请参阅 TechNet 上的 Azure 托管缓存服务的本地缓存产品.

可对所有角色中缓存拓扑启用通知。

逐出政策

选项为“已启用”或“已禁用”,“已启用”时使用 LRU(最近一次使用)算法来决定要逐出哪些项目。默认值为“已启用”。

选项包括 LRU(最近一次使用)或“无”。默认值为 LRU

时间(分钟)

在托管缓存服务中,该设置的名称为“时间(分钟)”。

在角色中缓存中,该设置的名称为“生存时间(分钟)”。

过期策略

该设置的名称为“过期策略”,有三个可能值:“从不”、“绝对”和“滑动”,对应于角色中缓存的“过期策略”设置。

该设置的名称为“过期策略”,有三个可能值:“无”、“绝对”和“滑动窗口”。

要从角色中缓存迁移到托管缓存服务,在新的托管缓存服务缓存中重新创建角色中缓存缓存群集中的所有命名缓存。

配置新托管缓存服务缓存后,下一步是从托管角色中缓存的角色中删除缓存。根据角色中缓存缓存群集拓扑的不同,这些步骤也有所不同。

要删除专用角色缓存群集,必须从 Visual Studio 解决方案和云服务项目中的“角色”文件夹中删除缓存辅助角色项目。

  1. 在“解决方案资源管理器”中的云服务项目“角色”文件夹中右键单击缓存辅助角色,然后选择“删除。

    删除缓存辅助角色
  2. 在“解决方案资源管理器”中右键单击辅助角色项目,然后选择“删除”。

要禁用 Web 或辅助角色中的共存角色缓存,必须取消选中角色属性中“缓存”选项卡上的“缓存”设置。

  1. 在“解决方案资源管理器”中右键单击云服务项目中的角色,然后选择“属性”。

    缓存角色属性菜单项
  2. 切换到“缓存”选项卡,并取消选中“启用缓存”复选框,然后按 CTRL+S 保存。

    禁用并置角色缓存设置

创建并配置缓存后,下一步是添加必要的配置和引用以便缓存客户端可以访问缓存。托管缓存服务支持以下客户端。

  • Azure 网站

  • Azure 云服务 Web 角色和辅助角色

  • Azure 虚拟机

note备注
如果角色中缓存项目已使用最新的 SDK,则只需跳过以下步骤并按照更新缓存客户端配置以便使用缓存服务中所述的过程更新缓存客户端配置。

如果角色中缓存项目使用的是 SDK 1.8 - 2.0,则需要删除 Caching NuGet 程序包,删除任何剩余缓存客户端配置,然后安装最新的 Azure SDK(现行版本 2.1)。升级 SDK 后,安装并配置最新的 Caching NuGet 程序包。若要配置缓存客户端,请针对每个缓存客户端执行以下步骤。

在为 托管缓存服务配置客户端应用程序之前,必须删除现有的 角色中缓存 配置和程序集引用。可通过卸载 Caching NuGet 程序包来完成。

若要卸载 角色中缓存 NuGet 程序包,请在“解决方案资源管理器”中右键单击客户端项目,然后选择“管理 NuGet 程序包”。选择“已安装的程序包”节点,然后在“搜索已安装的程序包”框中键入“Caching”。选择“Azure Shared Caching”,单击“卸载”,然后单击“关闭”。

note备注
在以下屏幕快照中,NuGet 程序包版本为“2.1.0.0”。如果你的程序包版本为此版本或更高版本,则可跳过此步。如果 NuGet 程序包版本为“1.8.*”或“2.0.*”,则只需执行此步。

卸载角色中缓存 NuGet 包

卸载 角色中缓存 NuGet 程序包会删除客户端应用程序的 app.configweb.config 中的 角色中缓存 程序集和 角色中缓存 条目。由于在卸载 NuGet 程序包时可能不会删除某些自定义设置,因此,请打开 web.configapp.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 部分将类似于以下示例。

    <dataCacheClients>
      <dataCacheClient name="default" channelOpenTimeout="0">
        <autoDiscover isEnabled="true" identifier="CacheWorker" />
      </dataCacheClient>
    </dataCacheClients>
    

在删除 角色中缓存 配置后,可以根据以下使用缓存 NuGet 程序包配置缓存客户端部分所述配置缓存客户端。

托管缓存服务提供了用于添加必要配置和程序集引用的 NuGet 程序包,以允许缓存客户端访问缓存。

Important重要提示
在使用 托管缓存服务 NuGet 程序包配置缓存客户端之前,请确保已从客户端角色的 web.configapp.config 中完全删除了 角色中缓存 配置,如前一部分所述。

Important重要提示
执行这些步骤需要安装最新的 NuGet 程序包管理器(版本 2.2.* 或更高版本)。若要安装最新的 NuGet 程序包管理器,请参阅 NuGet 程序包管理器

若要使用 托管缓存服务NuGet 程序包,请在“解决方案资源管理器”中右键单击客户端项目,然后选择“管理 NuGet 程序包”。

选择“Azure Caching”,单击“安装”,然后单击“我接受”。将程序包安装到客户端项目后,请单击“关闭”以关闭“管理 NuGet 程序包”窗口。

note备注
如果“Azure Caching”未出现在列表中,请在“联机搜索”文本框中键入“WindowsAzure.Caching”。

Windows Azure 缓存 NuGet 包

托管缓存服务NuGet 程序包在安装到客户端项目后,将添加所需的配置和程序集引用,这样客户端应用程序就可以访问缓存。

在该项目的 web.configapp.config 中,将添加几个项目。

  1. 两个节将添加到 configSections,即 dataCacheClientscacheDiagnostics

    <!-- 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>
    
  2. 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>
    
    [Cache role name or Service Endpoint] 替换为管理门户中缓存仪表板上显示的终结点 URL。

    Windows Azure 缓存服务的终结点 URL
    在本例中,缓存的名称为“applicationcache”,终结点 URL 为“applicationcache.cache.windows.net”。

    <autoDiscover isEnabled="true" identifier="applicationcache.cache.windows.net" />
    
    取消注释 securityProperties 部分,将 [Authentication Key] 替换为主身份验证密钥。

    <!--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 托管缓存服务的安全模型

    管理 Windows Azure 缓存服务的访问密钥
    Warning警告
    必须正确配置这些设置,否则客户端将无法访问缓存。

对于云服务项目,托管缓存服务 NuGet 程序包还会将 ClientDiagnosticLevel 设置添加到 ServiceConfiguration.cscfg 中缓存客户端角色的 ConfigurationSettings。以下示例显示了 ClientDiagnosticLevel 为 1(默认的 ClientDiagnosticLevel)的某个 WebRole1 文件的 ServiceConfiguration.cscfg 部分。

<Role name="WebRole1">
  <Instances count="1" />
  <ConfigurationSettings>
    <!-- Other settings omitted for space... -->
    <Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" value="1" />
  </ConfigurationSettings>
</Role>
note备注
有关缓存诊断级别的详细信息,请参阅 关于 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

note备注
托管缓存服务和 角色中缓存共享同一 API,虽然程序集名称相同,但程序集本身不同且位于不同的位置。托管缓存服务 NuGet 程序包将删除 角色中缓存 程序集引用,然后添加正确的 托管缓存服务 程序集引用。托管缓存服务程序集位于 C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.1\ref\Caching 文件夹中。

如果角色中缓存项目已使用最新的 SDK,则只需更新缓存客户端配置以指向新的托管缓存服务缓存。

  1. 打开缓存客户端项目的 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>
    
  2. autoDiscover 部分中,将 identifier 属性中角色中缓存集群的角色名称替换为托管缓存服务缓存的终结点 URL 名称。终结点 URL 显示在管理门户中的缓存仪表板上。

    Windows Azure 缓存服务的终结点 URL
    在本例中,缓存的名称为“applicationcache”,终结点 URL 为“applicationcache.cache.windows.net”。

    <autoDiscover isEnabled="true" identifier="applicationcache.cache.windows.net" />
    
  3. 取消注释 securityProperties 部分,将 [Authentication Key] 替换为身份验证密钥。

    <!--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>-->
    
    
    在管理门户中,通过从缓存仪表板单击“访问密钥”可以查看身份验证密钥。

    管理 Windows Azure 缓存服务的访问密钥

ASP.NET Web 项目从 角色中缓存 迁移到 托管缓存服务(如Configure the Cache Clients所述)后,只需极少量的更改即可将 ASP.NET 会话状态或页面输出缓存存储到缓存中。若要启用在缓存中存储 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>
note备注
如果你的 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>
note备注
如果你的 ASP.NET Web 角色已配置为使用用于 缓存 的输出缓存提供程序,则此部分已存在,不需要执行任何更改。

更新 cacheName 以指定用于保存会话状态的缓存。使用 default 可指定默认缓存。

OutputCache 指令添加到你希望为其缓存输出的每个页面。

<%@ OutputCache Duration="60" VaryByParam="*" %>

本例中,缓存的页面数据在缓存中保留 60 秒钟,并针对每种参数组合缓存不同的页面版本。有关可用选项的详细信息,请参阅 OutputCache 指令

另请参阅

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
显示:
© 2014 Microsoft