將於 2014 年 9 月 1 日中止Azure Shared Cache服務,所以你須要在該日期前遷移到 Azure Redis Cache。Azure Redis Cache包含如下兩個層級的產品。html
使用 StackExchange.Redis NuGet 程序包配置緩存客戶端git
以 Visual Studio 開發的 .NET 應用程序可使用 StackExchange.Redis 緩存客戶端來訪問緩存。github
使用 ConnectionMultiplexer 類鏈接緩存web
在 Azure Redis Cache中,緩存鏈接由 ConnectionMultiplexer
類進行管理。要鏈接 Azure Redis Cache 實例,請調用靜態 ConnectionMultiplexer.Connect
方法並傳遞到終結點和密鑰中,以下列中所示。redis
ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("yhdcache0.redis.cache.windows.net,ssl=true,password=...");
ConnectionMultiplexer
被設計成在整個客戶端應用程序中共享和重複使用,所以不須要在每次執行操做時都加以建立。若是建立實例後須要在每次調用緩存時都進行鏈接,性能會有所降低。sql
一種在應用程序中共享 ConnectionMultiplexer
實例的方法是使用一個靜態屬性來返回已鏈接的實例,以下列中所示。這樣,一旦 ConnectionMultiplexer
斷開鏈接,即可以初始化新的鏈接實例。數據庫
private static ConnectionMultiplexer connection; private static ConnectionMultiplexer Connection { get { if(connection == null || !connection.IsConnected) { connection = ConnectionMultiplexer.Connect("yhdcache0.redis.cache.windows.net,ssl=true,password=..."); } return connection; } } 若是不想經過 SSL 保護緩存/客戶端通訊,則只須要傳遞到終結點和密鑰中,或者設置 。有關高級鏈接配置選項的詳細信息,請參閱 StackExchange.Redis 配置模型.創建鏈接後,經過調用 方法返回對 Redis Cache 數據庫的引用。從 方法返回的對象是一個輕量級直通對象,不須要進行存儲。ssl=falseConnectionMultiplexer.GetDatabaseGetDatabase
IDatabase cache = Connection.GetDatabase(); // Perform cache operations using the cache object... // Simple put of integral data types into the cache cache.StringSet("key1", "value"); cache.StringSet("key2", 25); // Simple get of data types from the cache string key1 = cache.StringGet("key1"); int key2 = (int)cache.StringGet("key2");
StackExchange.Redis 客戶端使用 RedisKey
和 RedisValue
類型在緩存中訪問和存儲項目。這些類型映射到大多數基本語言類型(包括 string
),一般不直接使用。Redis Strings
是最基本的 Redis 值類型,能夠包含多種數據類型(包括通過序列化的二進制流)。雖然你可能不會直接使用這種類型,但會使用名稱中包含 String
的方法。其中,最爲常見的是 StringSet
和 StringGet
方法。編程
// Simple put of integral data types into the cache cache.StringSet("key1", "value"); cache.StringSet("key2", 25); // Simple get of data types from the cache string key1 = cache.StringGet("key1"); int key2 = (int)cache.StringGet("key2");
Azure Redis Cache可使用 .NET 對象和基本數據類型,但 .NET 對象只有在通過序列化以後才能進行緩存。這屬於應用程序開發人員的職責。這樣,開發人員即可以靈活選擇序列化程序。在下列示例中,緩存對象以前,使用了 StackExchange.Redis.IDatabase
類型的擴展類和 BinaryFormatter 來簡化這些對象的序列化。windows
public static class SampleStackExchangeRedisExtensions { public static T Get<T>(this IDatabase cache, string key) { return Deserialize<T>(cache.StringGet(key)); } public static object Get(this IDatabase cache, string key) { return Deserialize<object>(cache.StringGet(key)); } public static void Set(this IDatabase cache, string key, object value) { cache.StringSet(key, Serialize(value)); } static byte[] Serialize(object o) { if(o == null) { return null; } BinaryFormatter binaryFormatter = new BinaryFormatter(); using (MemoryStream memoryStream = new MemoryStream()) { binaryFormatter.Serialize(memoryStream, o); byte[] objectDataAsStream = memoryStream.ToArray(); return objectDataAsStream; } } static T Deserialize<T>(byte[] stream) { if(stream == null) { return default(T); } BinaryFormatter binaryFormatter = new BinaryFormatter(); using (MemoryStream memoryStream = new MemoryStream(stream)) { T result = (T)binaryFormatter.Deserialize(memoryStream); return result; } } }
RedisValue
類型能夠直接使用字節數組,所以,調用 Get
幫助程序方法時,它會將對象序列化爲字節流,而後再緩存該對象。檢索項目時,項目會從新序列化爲對象,而後返回給調用程序。數組
ASP.NET 會話狀態的應用程序
<sessionState mode="Custom" customProvider="MySessionStateStore"> <providers> <!-- <add name="MySessionStateStore" host = "127.0.0.1" [String] port = "" [number] accessKey = "" [String] ssl = "false" [true|false] throwOnError = "true" [true|false] retryTimeoutInMilliseconds = "0" [number] /> --> <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" accessKey="" ssl="false" /> </providers> </sessionState>
使用 Azure 管理門戶預覽緩存邊欄選項卡中的值配置這些屬性,而後根據須要配置其餘值。
host
– 指定緩存終結點。port
– 使用你的非 SSL 端口或 SSL 端口,具體取決於 ssl
設置。accessKey
– 使用緩存的主密鑰或輔助密鑰。ssl
– 若是要經過 SSL 保護緩存/客戶端通訊,則設爲 true,不然設爲 false。請務必指定正確的 port
。throwOnError
– 若是但願在發生故障時拋出異常,則設爲 true;若是但願按照 retryTimeoutInMilliseconds
指定的重試時間間隔重試操做,則設爲 false。retryTimeoutInMilliseconds
– 若是將 throwOnError
設爲 false,則系統會按照此時間間隔(以毫秒爲單位)重試操做。
MVC movie app with Azure Redis Cache in 15 minutes
Redis緩存,Azure災難恢復,標籤,SQLDB彈性比例,文檔數據庫