為了實現網站橫向擴充的架構,狀態或是資料快取需要一個共用的儲存機制,除了儲存在資料庫(資料庫也需要散熱):
- ASP.NET Session可以選State Server。
- 如果是快取可以選Windows Server AppFabric Cache(Session也可以存)。
自從要開始支援橫向擴充就這樣盤算著及設計,昨天和公司年輕熱血的工程師討論技術議題,認識一種NoSQL的好物:Redis,晚上不跑步,嘗試使用Azure設定快取伺服器。
在社群網站大量快速的讀取需求下,出現許多NoSQL解決方案,就像memcached,Redis也是其中一種;
Redis是基於BSD License的開源軟體,一種key pair方式的記憶體資料儲存。
想體驗看看,Azure上剛好有一篇:如何使用 Azure Redis 快取,於是選擇雲端的解決方案。
主要的步驟
A.架設Redis Cache服務。
B.Client端專案進行Nuget安裝(StackExchange.Redis)。
C.建立Client端測試程式。
A.架設Redis Cache服務
1.進Windows Azure Portal,按下新增,並在所有項目輸入篩選條件:cache
2.選擇建立Redis快取
3.輸入DNS Name並設置相關資源參數,輸入完畢後按下建立。(如果需要叢集架構,可以選進階層)
4.從儀表板上可以發現正在建置,大約5-10分鐘就會建立完畢。
5.建置完畢後進入Redis快取管理頁面中,選取顯示管理金鑰。
然後將主要連接字串複製要來,待會Client端連線要用到。
B.Nuget安裝(搜尋StackExchange.Redis)。
C.建立Client端測試程式。
1.建立Redis Connection,將剛剛複製到主要連接字串貼進來Connect引數。
2.預設SSL連線走6380;Non-SSL走6379。
3.分別利用String.Set及String.Get 將物件放入快取或取出快取
Stopwatch sw = new Stopwatch();
sw.Start();
//設定連線字串
ConnectionMultiplexer connection =
ConnectionMultiplexer.Connect(
"Cyber.redis.cache.windows.net:6380,password=xxx=,ssl=True,abortConnect=False");
sw.Stop();
Console.WriteLine("總耗時(Connect) = " + sw.ElapsedMilliseconds);
sw.Restart();
if (connection.IsConnected)
{
IDatabase cache = connection.GetDatabase();
sw.Stop();
Console.WriteLine("總耗時(GetDatabase) = " + sw.ElapsedMilliseconds);
sw.Restart();
cache.StringSet("key1", "key1 value");
cache.StringSet("key2", 25);
sw.Stop();
Console.WriteLine("總耗時(StringSet) = " + sw.ElapsedMilliseconds);
sw.Restart();
Console.WriteLine("key1:{0}", cache.StringGet("key1"));
Console.WriteLine("key2:{0}", cache.StringGet("key2"));
sw.Stop();
Console.WriteLine("總耗時(StringGet) = " + sw.ElapsedMilliseconds);
sw.Restart();
}
4.執行測試:
小結:
- 建立Redis連線的時間很長: 連線物件一定要共用。
- Redis 3.0開始支援叢集Cluster(資料分散於多個 Redis 節點)。
- Redis Process本身為單一執行序。
- Redis 可以安裝在Linux或是OS X中,版本也是由Redis官方支援;但官方強烈建議佈署在Linux最佳。
- 也有Windows安裝版本: 由微軟Developer維護。
參考: