Azure Redis Cache Redis到底該如何利用? Spring mvc Data Redis—Pub/Sub(附Web項目源碼)

將於 2014 年 9 月 1 日中止Azure Shared Cache服務,所以你須要在該日期前遷移到 Azure Redis Cache。Azure Redis Cache包含如下兩個層級的產品。html

使用 StackExchange.Redis NuGet 程序包配置緩存客戶端git

以 Visual Studio 開發的 .NET 應用程序可使用 StackExchange.Redis 緩存客戶端來訪問緩存。github

    1. 要使用 StackExchange.Redis NuGet 程序包以 Visual Studio 配置客戶端應用程序,請在「解決方案資源管理器」中右鍵單擊項目,而後選擇「管理 NuGet 程序包」。
    2. 在「聯機搜索」文本框中輸入 StackExchange.Redis,而後從結果中選擇它並單擊「安裝」。
    3. NuGet 程序包便會下載併爲客戶端應用程序添加所需的程序集引用,以使用 StackExchange.Redis 緩存客戶端訪問 Azure Redis Cache

使用 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 客戶端使用 RedisKeyRedisValue 類型在緩存中訪問和存儲項目。這些類型映射到大多數基本語言類型(包括 string),一般不直接使用。Redis Strings 是最基本的 Redis 值類型,能夠包含多種數據類型(包括通過序列化的二進制流)。雖然你可能不會直接使用這種類型,但會使用名稱中包含 String 的方法。其中,最爲常見的是 StringSetStringGet 方法。編程

// 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 會話狀態的應用程序

  1. 要使用 Redis Cache 會話狀態 NuGet 程序包在 Visual Studio 中配置客戶端應用程序,請在「解決方案資源管理器」中右鍵單擊項目,而後選擇「管理 NuGet 程序包」。
  2. 在「聯機搜索」文本框中輸入 Redis Cache Session State,而後從結果中選擇它並單擊「安裝」。
    NuGet 程序包會下載並添加所需的程序集引用,並將如下部分添加到包含 ASP.NET 應用程序所需配置的 web.config 文件中,以便使用 Redis Cache 會話狀態提供程序。
<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

http://wacel.codeplex.com/

Redis到底該如何利用?

Redis緩存,Azure災難恢復,標籤,SQLDB彈性比例,文檔數據庫

Redis編程實踐【pub/sub】

Spring mvc Data Redis—Pub/Sub(附Web項目源碼)

https://github.com/cargomedia/socket-redis

相關文章
相關標籤/搜索