匯出 (0) 列印
全部展開

作法:在 Azure 雲端服務中使用 Azure In-Role Cache

更新日期: 2014年8月

快取可以藉由減少重複計算相同的結果,以改善 Azure 雲端服務專案中的 Web 應用程式的效能。當您使用快取時,經常要求的內容和其他資料就能只計算一次並且儲存以供重複使用。

依照本主題的指示,可為您的 Azure 雲端服務專案加入快取支援。Azure In-Role Cache 可讓您設定專用於快取的角色,或將角色仍未使用的資源運用於快取。例如,假設您的 Web 角色每個執行個體只使用半數的可用資源,您即可將這些資源運用於快取輸出,工作階段狀態或常用的資料。

您要在 Azure 雲端服務應用程式的 .cscfg 和 .csdef 檔案中設定快取,而使用角色的 [快取] 屬性頁設定值進行這項設定最為方便。若要在特定角色中使用快取,請加入資訊至該角色的 XML 組態檔。在 ASP.NET Web 角色中,適當的組態檔為 web.config。若為其他角色,組態檔則為 app.config。您可以用手動方式或使用 NuGet 封裝將資訊新增至組態檔。如需角色中快取的詳細資訊,請參閱 Azure 角色中快取

快取的設定方式有兩種。您可以加入專用於快取的快取背景工作角色為雲端服務加入快取功能,或是設定快取以使用先前存在之角色的記憶體、CPU 和頻寬資源。專用快取會以單獨的角色執行。若您要將執行個體的資源全數專用於執行這些執行個體,這個選項就很適合。共置快取將與另一個角色在相同的執行個體中執行。如果您的角色執行個體未全數使用其執行所在電腦的資源,這個選項就很適合。

本主題包含下列各節。

您可以加入快取至現有角色,或是建立可供從其他角色使用的快取背景工作角色。

  1. 開啟 Azure 雲端服務專案的捷徑功能表,然後選擇 [新的背景工作角色專案]。

  2. 從專案範本清單中選擇 [快取背景工作角色] 範本,然後指定專案的名稱,例如 CacheWorkerRole1

    背景工作角色專案隨即建立。

  3. 展開 Azure 雲端服務專案底下的 [角色] 節點,開啟剛建立的快取背景工作角色的捷徑功能表,然後選擇 [屬性]。

    此專案的角色設計工具隨即出現。

  4. 在 [組態] 索引標籤上,設定適當的虛擬機器大小,以及此角色的執行個體數目。

  5. 在 [快取] 索引標籤上,請注意 [快取叢集設定] 底下已選取 [專用角色]。

  6. 設定您所要的預設快取行為,或以自訂屬性建立具名快取。

    每一個具名快取本身各有其可供設定的屬性集。指向資料表標頭以顯示有關如何設定每一個具名快取的資訊。如需詳細資訊,請參閱作法:設定 Azure In-Role Cache

  1. 在 Azure 雲端服務專案中展開 [角色] 節點,開啟您想要加入快取之角色的捷徑功能表,然後選擇 [屬性]。

  2. 在 [快取] 索引標籤上,選取 [啟用快取] 核取方塊。

  3. 選擇 [共置] 選項,然後選擇託管該角色的虛擬機器要專用於快取的記憶體資源百分比。一般而言,[] 虛擬機器的這個數字應該介於 30% 到 55%,[超大] 虛擬機器可高達 80%。您可以在雲端服務於正常負載下執行時使用遠端桌面登入虛擬機器,然後使用 [工作管理員] 檢視 [實體記憶體] 百分比,最佳化這個數字。剩餘的記憶體即可用於共置快取。

  4. 設定您所要的預設快取行為,或以自訂屬性建立具名快取。

您可以依照本節所述手動將快取參考加入至雲端服務專案,或是依照本主題稍後的使用 NuGet 將快取加入至角色所述方式使用 NuGet。手動加入參考可讓您查看組件所在的磁碟位置,但比較麻煩。

  1. 在含有您要使用快取之角色的雲端服務專案底下,從 [參考] 節點的捷徑功能表選擇 [加入參考]。

  2. 在 [加入參考] 對話方塊中,選取適當的核取方塊以加入下列組件的參考,然後選擇 [確定] 按鈕:

    • Microsoft.ApplicationServer.Caching.AzureClientHelper

    • Microsoft.ApplicationServer.Caching.Client

    • Microsoft.ApplicationServer.Caching.Core

    • Microsoft.Web.DistributedCache

  3. 在含有您要加入快取之角色的專案中,開啟 Web 角色專案的 web.config 檔或開啟其他專案類型的 app.config 檔。

  4. 如果 configSections 區段不存在,請將其加入。在該區段中,加入快取區段的宣告,如下列程式碼所示。

    <configSections>
        <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/>
      </configSections>
    
    
  5. 加入 XML 以識別所要使用的具名快取。

    <dataCacheClients>
        <tracing sinkType="DiagnosticSink" traceLevel="Verbose"/>
        <dataCacheClient name="default">
          <autoDiscover isEnabled="true" identifier="WebRole1"/>
        </dataCacheClient>
      </dataCacheClients>
    
    

    如果只宣告一個快取,其名稱可以是 default,如上述範例所示。若要宣告多個快取,請分別為每個快取加入 dataCacheClient 區段並為每個快取指定唯一名稱。當您從程式碼呼叫 GetDefaultCache 物件的 DataCacheFactory 方法時,會傳回名為 default 的快取。identifier 屬性是指定已加入快取支援之 Web 角色專案的名稱,或快取背景工作角色的名稱。

    既已在此角色中設定分散式快取之後,您便能從程式碼建立 DataCacheFactory 和 DataCache 物件來存取該快取。

  6. 在程式碼後置檔案中,將宣告加入至 Page 類別,並加入亂數產生器以獲取資料用於測試快取。

            static DataCacheFactory myFactory;
            static DataCache myCache;
            static Random randomizer = new Random();
    
    
  7. 若要建立 Web 應用程式以使用快取,請將 Default.aspx 網頁內的程式碼取代為下列程式碼。

    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
        CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %>
    
    <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    </asp:Content>
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
     
         <p style="font-size:large; height: 283px;">
            <asp:Label ID="Label0" runat="server" Text="Text for the cache:   " />
            <asp:TextBox runat="server" ID="TextBox1" Width="125" /> <br /> <br />
    
            <asp:Button runat="server" onclick="OnPutInCache" Text="Put in Cache" id="AddCachedItemsButton" /> &nbsp;&nbsp;&nbsp;
            <asp:Button runat="server" onclick="OnGetFromCache" Text="Get from Cache" id="GetCachedItemsButton" /> &nbsp;&nbsp;&nbsp;
            <asp:Label ID="Label1" runat="server" Width="500" />
    
            <br /> <br />  <br /> 
        
            Cached Datestamp: <%= DateTime.Now.ToString() %><br />
            Fresh Datestamp: <asp:Substitution runat="server" methodname="GetFreshDateTime" id="UnCachedArea" /><br /><br />
        </p>
    
    </asp:Content>
    
    
    
  8. 加入程式碼以初始化快取。

            protected void Page_Load(object sender, EventArgs e)
            {
                try
                {
                    //Get a named cache (or default cache)
                    if (myCache == null)
                    {
                        // You should initialize the data cache factory
                        // once and keep reusing the same object.
                        myFactory = new DataCacheFactory();
                        myCache = myFactory.GetDefaultCache();
                        // If you want to get a handle to a named cache
                        // that is not the default cache, supply the
                        // cache's name from the configuration file:
                        // myCache = myFactory.GetCache("anotherNamedCache");
                    }
                }
                catch (DataCacheException dce)
                {
                    Label1.Text = dce.ToString();
                }
            }
    
    

    這段初始化程式碼應該在使用快取之前呼叫。例如,您可以將上述程式碼加入至 Page_Load 事件處理常式。否則,快取 Factory 的 GetDefaultCache() 方法將用於建立快取的控制代碼。如果未指定快取名稱,即會使用名為 default 的快取。只要使用了快取方法,就有可能擲回 DataCacheException 例外狀況。上述程式碼會攔截此例外狀況,並透過 Label 控制項向使用者顯示。

  9. 加入程式碼以使用快取。

            /// <summary>
            /// Adds the value of the TextBox to the cache
            /// </summary>
            protected void OnPutInCache(object sender, EventArgs e)
            {
                try
                {
                    myCache.Put("MyKey", TextBox1.Text);
                    Label1.Text = " \" " + TextBox1.Text + "\" has been added to the cache.";
                }
                catch (DataCacheException dce)
                {
                    Label1.Text = dce.ToString();
                }
            }
    
    

    上述範例假設的是簡易 Web Form 附有文字方塊和按鈕,但您可以使用同樣的程式碼快取任何資料。此範例使用 Put 方法將資料加入至快取。快取的運作方式與字典相同。第一個引數是索引鍵,第二個引數是您想要快取的資料。

  10. 呼叫 Get 方法並提供索引鍵,即可從快取擷取資料。

            /// <summary>
            /// Gets the cached item (that was added from the TextBox)
            /// </summary>
            protected void OnGetFromCache(object sender, EventArgs e)
            {
                try
                {
                    string outputFromCache = myCache.Get("MyKey") as string;
                    Label1.Text = "\"" + outputFromCache + "\" has been retrieved from the cache.";
                }
                catch (DataCacheException dce)
                {
                    Label1.Text = dce.ToString();
                }
            }
    
    

輸出快取讓網站無須重新產生已擷取的資料,從而得以改善效能。藉由編輯 Web 應用程式的組態檔,您不必變更程式碼就可以使用分散式快取,快取 ASP.NET 應用程式的輸出。請參閱<作法:設定 Azure In-Role Cache>以取得詳細資訊。

  1. 開啟您要設定輸出快取的 ASP.NET 應用程式的 web.config 檔案。

  2. 加入下列幾行內容,設定輸出快取使用分散式快取。

        <caching>
          <outputCache defaultProvider="defaultProvider" >
            <providers>
              <add cacheName="default"
                   name="defaultProvider"
                   dataCacheClientName="nameOfDataCacheClient"
                   applicationName="<unique-appId>"
                   type= "Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" />
            </providers>
          </outputCache>
        </caching>
    
    

    對於 cacheName,指定適當具名快取的名稱,此快取由指定的 dataCacheClient 託管。dataCacheClient 屬性指定託管快取的角色。

  3. 將 OutputCache 指示詞加入到您要快取輸出的網頁。

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

    Duration 是指您要讓資料保留在快取中的時間長短 (以秒為單位)。VaryByParam 表示應為每個參數組合快取不同版本的網頁。在此內容中的星號 (*) 表示因所有參數而異。您也可以依名稱指定參數。如需各種可用選項的完整描述,請參閱 OutputCache 指示詞

    輸出快取至此已設定完成。

本節示範如何以不必修改程式碼的方式,快取 ASP.NET Web 應用程式的工作階段狀態資訊。

  1. 開啟您要設定工作階段狀態快取的 ASP.NET Web 應用程式的 web.config 檔案。

  2. 加入下列幾行內容,指定您要使用的快取名稱 (在本例中為 "default")、提供者的名稱、dataCacheClient 的名稱,以及應用程式的 appId。

        <!--Set up custom session state provider -->
        <sessionState mode="Custom" customProvider="defaultProvider">
          <providers>
            <add cacheName="default"
                 name="defaultProvider"
                 dataCacheClientName="nameOfDataCacheClient"
                 applicationName="<unique-appId>"
                 type= "Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"/>
          </providers>
        </sessionState>
    
    

您可以基於不同的用途建立和設定多個具名快取。例如,您可將某個快取用於輸出,而另一個快取用於以程式設計方式處理資料。

  1. 開啟角色的角色設計工具並選擇 [快取] 索引標籤。

  2. 在 [具名快取] 底下,加入用於輸出的具名快取和另一個用於工作階段資訊的具名快取。

  3. 在 [具名快取] 資料表中,設定具名快取的屬性。

    例如,您可以設定收回原則,將輸出快取設為 [TTL] 並將工作階段狀態快取設為 []。

  4. 開啟 web.config 檔,然後將 outputCache 和 sessionState 區段中的 cacheName 屬性變更為新值。

將快取加入至現有角色最簡便的方法是使用 NuGet 封裝管理員。如果您已安裝 Azure Tools,NuGet 就能加入適當的參考,並對組態檔進行必要的修改。

  1. 確定您已安裝最新版的 NuGet。

    如需詳細資訊和安裝指示,請參閱 NuGet

  2. 在 [方案總管] 中,開啟您要加入快取之角色所屬專案節點的捷徑功能表,然後選擇 [管理 NuGet 封裝]。

    [管理 NuGet 封裝] 對話方塊隨即出現。

  3. 在線上組件庫中選擇 [Azure 角色中快取],然後選擇 [安裝] 按鈕。

    專案將有所修改、加入快取組件的參考,並且更新組態檔以設定快取。

  4. 在專案的組態檔中搜尋 dataCacheClient 項目,其具有 autoDiscover 子項目。

  5. 在該子項目中,將 identifier 屬性的值變更為提供快取之角色的名稱。

        <dataCacheClient name="default">
          <autoDiscover isEnabled="true" identifier="CacheWorkerRole1"/>
        </dataCacheClient>
    
    
  6. 若要開始使用快取,請依本主題先前所述修改程式碼。

    若要啟用輸出快取或工作階段狀態快取,請編輯適當角色的組態檔,並依本主題先前所述進行其他變更。若要以程式設計方式使用快取,請在程式碼後置檔案中加入適當的程式碼,建立快取及加入和擷取資料。

  7. (選擇性) 若要管理整個方案的 NuGet 封裝,以及同時為多個專案加入快取支援,請開啟方案節點的捷徑功能表,然後選擇 [管理 NuGet 封裝]。

另請參閱

顯示:
© 2014 Microsoft