《Windows Azure Platform 系列文章目錄》html
Update 2016-01-12web
https://azure.microsoft.com/zh-cn/documentation/articles/cache-dotnet-how-to-use-in-role/windows
微軟宣佈Azure Managed Cache Service和Azure In-Role Cache會在2016年11月30日下線,建議全部的用戶採用Redis Cache。session
有關Redis Cache的內容,請參考:架構
http://www.cnblogs.com/threestone/category/741409.htmlasp.net
筆者很早之前就想寫這篇文章了,昨天晚上項目正好遇到,今天記錄下來。post
爲何要使用In-Role Cache?url
咱們在開發PaaS Cloud Service的時候,PaaS VM都是無狀態的。並且默認的Load Balancer是5要素(source IP, source port, destination IP, destination port, protocol type)spa
http://azure.microsoft.com/blog/2014/04/08/microsoft-azure-load-balancing-services/.net
若是遇到須要保留Session,使用Cache的時候,就會遇到一些問題。這時候,咱們就可使用In-Role Cache了。
In-Role Cache介紹
In-Role Cache分爲兩種方式:
- Co-located Role(共享模式)。在共享模式中,Caching是保存在多個Web Role Instance的內存中。
- Dedicated Role(專用模式)。在專用模式中,用戶須要在工程文件中新建額外的Cache Worker Role,Caching不保存在Web Role VM的內存中,而是保存在新建的Cache Worker Role中。
由於使用Dedicated Role,須要增長額外的Cache Worker Role,會增長計算成本
如何使用In-Role Cache?
1.In-Role Cache不能在Virtual Machine虛擬機中使用,只能在PaaS Cloud Service使用。
2.In-Role Cache不是經過Azure Management Portal建立的,而是安裝完Azure SDK後,在Cloud Project中配置的。
注意:本章介紹的是Co-located Role(共享模式)。
Co-located Role的架構圖,請參考http://weblogs.asp.net/scottgu/meet-the-new-windows-azure
1.使用管理員身份,運行Visual Studio 2013,建立一個新的Cloud Project,命名爲LeiColocatedRole。圖略。
2.在New Windows Azure Cloud Service中,只須要添加ASP.NET Web Role。以下圖:
3.咱們在項目文件中,選擇WebRole1,右鍵,屬性
4.在Configuration欄目中,將Instance Count設置爲2,設置2個Web Role Instance作高可用,以下圖:
5.在Caching欄目,修改如下紅色部分
(1)勾選Enable Caching,啓用In-Role Caching
(2)點擊Co-located Role,而且在Cache Size中,設置內存比,即PaaS Web Role Instance的30%內存用來保存Caching信息
(3)設置Storage Account,由於Cache Cluster(PaaS Web Role Instance)會將Runtime的信息保存在Storage,因此這裏必定要設置正確
(4)Named Cache默認是default,咱們能夠經過Add Named Cache,增長新的Cache Name。
另外,筆者在步驟4設置了Instance Count=2,因此咱們能夠勾選High Availability,保證高可用。這樣不會由於某臺Web Role Instance由於故障宕機致使Caching丟失
(若是Instance Count=1的話,是沒法勾選High Availability)
6.而後咱們點擊WebRole1,右鍵,Manage NuGet Packages
7.查找關鍵字Windows Azure Cache,查詢到結果後,點擊下圖的Install進行安裝
8.安裝完NuGet以後,會發現WebRole1項目下,增長了如下的引用:
若是你使用ASP.NET,還會增長引用:Microsoft.Web.DistributedCache.dll
9.咱們修改WebRole1下的Web.config,找到autoDiscover節點,以下圖:
將上圖中的[Cache role name or Service Endpoint]中的節點,修改成項目文件的RoleName,在筆者的Sample Code中,咱們設置爲WebRole1
設置完畢後的結果以下圖:
10.將ASP.NET的Session指向Cache
最後咱們在Web.Config節點中,將sessionState節點的註釋去掉。以下圖:
注意:若是在步驟5中,修改了默認的Named Cache "default",咱們須要在上面的XML節點中,將dataCacheClientName的節點,修改成咱們自定義的Cache Name。如上圖紅色部分:
11.使用In-Role Cache
在C#代碼中,增長using語句:
using Microsoft.ApplicationServer.Caching;
聲明DataCache
static DataCache myCache;
實例化
myCache = new DataCache("default");
寫Cache
myCache.Put("MyKey", TextBox1.Text);
讀Cache
string outputFromCache = myCache.Get("MyKey") as string;
參考資料:http://blog.sanc.idv.tw/2012/06/windows-azure-windows-azure-co-located.html