前面幾篇在介紹 Redis 的安裝以及使用 Redis Desktop Manager 工具,現在終於回到主題如何用 C# 存取 Redis 服務,在官方網站推薦的 .NET Redis client(s) 有很多種,討論度最高的為 StackExchange.Redis 其開發者在 StackExchange 公司工作且 Library 廣為 .NET 開發者推薦,這篇文章要介紹 StackExchange.Redis 的安裝及基本用法,若是有不清楚或是錯誤的地方歡迎討論予糾正。
安裝 StackExchange.Redis
Step 1 : 開 Nuget packer Manager 輸入 StackExchange.Redis,目前提供版本為 2.0.519 版,點擊下載
Step 2 : 安裝時會提示下載套件相依的 dll 內容,選擇下一步即可
或者直接在 Nuget console 直接輸入下列指令進行安裝
PM> Install-Package StackExchange.Redis確認下載成功 : 在 dll 中看到有即下載成功
建立連線
在存取前,首先第一步需要的就是與 Redis 建立連線的動作,在建立連線前想先提到 ConnectionMultiplexer 類別,ConnectionMultiplexer 是整個 StackExchange.Redis 核心類別,Multiplex 設計概念可以參考 Jed 大文章有更詳細說明,主要重點是 connection 分享與重用 (shared and reused),因此不需要重複建立 ConnectionMultiplexer 實體物件。
建立連線可以使用 ConnectionMultiplexer.Connect 或是透過 ConfigurationOptions 類別自行定義,以下面例子來說透過兩種建立連線方法皆可
// connectionString var conn = ConnectionMultiplexer.Connect("127.0.0.1:6379"); // ConfigurationOptions ConfigurationOptions config = ConfigurationOptions.Parse("127.0.0.1:6379,allowAdmin=true"); var conn2 = ConnectionMultiplexer.Connect(config.ToString());另外,在連線管理上需要注意的是建立連線後重複使用問題,當每發送一個新的 Request 都建立連線,當 Request 量大時頻繁的 Create / Dipose 會影響其效能,解法是透過 Singleton Pattern 包成一個 Helper 類別處理,在 C# 4.0 之後可以透過 Lazy 語法達到此目的,範例如下
public class RedisConnectorHelper { static RedisConnectorHelper() { RedisConnectorHelper._connection = new Lazy<ConnectionMultiplexer>(() => { return ConnectionMultiplexer.Connect("localhost"); }); } private static Lazy<ConnectionMultiplexer> _connection ; public static ConnectionMultiplexer Connection { get { return _connection.Value; } } }
存取 Redis
完成建立連線之後,使用 Redis database 相當簡單,只需透過一行指令即可完成
var db = conn.GetDatabase();如果在有多台 Redis Server 或是需要使用非同步 API 需求時,我們可以透過 GetDataBase 參數指定 ServerID (databaseNumber)、設定是否為非同步模式(asyncState),databaseNumber 預設為 -1 與 asyncState 預設為 null ;另外在 GetDataBase 方法回傳 IDataBase interface,在 IDataBase 介面中定義了存取 Redis Server 常用的存取支援的 DataType 方法簽章,舉例來說常見的 String、List、Hash...等,在前面幾篇使用 Redis-cli command line 設定 String 可以改為以下 Code
// Set string value = "Hello World"; db.StringSet("Test", value); // set timeout 5min db.StringSet("Test", value, TimeSpan.FromSeconds(300)); // Get var test = db.StringGet("Test");簡單完成 GET / SET String,其中還可以指定特定 Key 的過期時間,使用上相當容易上手;
確認資料
存取完要來確認資料是否有正常寫入可以透過 Redis Desktop Manager 管理工具來確認 Redis 資料狀態
正常寫入,打完收工!!!
心得
這篇介紹了如何在 Visual Studio 安裝 StackExchange.Redis 以及基本的應用 StringGet / StringSet 寫法,個人覺得都算是基本的入門之一,就像是一段 Code 會跑跟怎樣寫得好是不一樣的兩件事,在實作上還是有很多細節與眉角需要關注的地方,之後如果有遇到會在分享出來。
參考
Redis系列 - C#存取Redis (上)
StackExchange.Redis
0 意見:
張貼留言