前面幾篇在介紹 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 直接輸入下列指令進行安裝
確認下載成功 : 在 dll 中看到有即下載成功
- PM> Install-Package StackExchange.Redis
建立連線
在存取前,首先第一步需要的就是與 Redis 建立連線的動作,在建立連線前想先提到 ConnectionMultiplexer 類別,ConnectionMultiplexer 是整個 StackExchange.Redis 核心類別,Multiplex 設計概念可以參考 Jed 大文章有更詳細說明,主要重點是 connection 分享與重用 (shared and reused),因此不需要重複建立 ConnectionMultiplexer 實體物件。
建立連線可以使用 ConnectionMultiplexer.Connect 或是透過 ConfigurationOptions 類別自行定義,以下面例子來說透過兩種建立連線方法皆可
另外,在連線管理上需要注意的是建立連線後重複使用問題,當每發送一個新的 Request 都建立連線,當 Request 量大時頻繁的 Create / Dipose 會影響其效能,解法是透過 Singleton Pattern 包成一個 Helper 類別處理,在 C# 4.0 之後可以透過 Lazy 語法達到此目的,範例如下
- // 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());
- 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 相當簡單,只需透過一行指令即可完成
如果在有多台 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
- var db = conn.GetDatabase();
簡單完成 GET / SET String,其中還可以指定特定 Key 的過期時間,使用上相當容易上手;
- // 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");
確認資料
存取完要來確認資料是否有正常寫入可以透過 Redis Desktop Manager 管理工具來確認 Redis 資料狀態
正常寫入,打完收工!!!
心得
這篇介紹了如何在 Visual Studio 安裝 StackExchange.Redis 以及基本的應用 StringGet / StringSet 寫法,個人覺得都算是基本的入門之一,就像是一段 Code 會跑跟怎樣寫得好是不一樣的兩件事,在實作上還是有很多細節與眉角需要關注的地方,之後如果有遇到會在分享出來。
參考
Redis系列 - C#存取Redis (上)
StackExchange.Redis
0 意見:
張貼留言