Redis 入門 - C#|.NET Core客戶端庫六種選擇

IT规划师發表於2024-09-12

經過前面的Redis基礎學習,今天正式進入編碼階段了,進入編碼階段我們又同樣面臨一道多選題,選擇什麼客戶端庫?要是有選擇困難症的又要頭疼了。不過別擔心我先頭疼,今天就給大家介紹6款.NET系Redis客戶端庫: ServiceStack.Redis、StackExchange.Redis、CSRedisCore、FreeRedis、NewLife.Redis、BeetleX.Redis。

01、ServiceStack.Redis

ServiceStack.Redis算的上最老牌、最有名的一款Redis C#/.NET客戶端庫了,但是因為商業性導致對於大多數人來說不是首選。

ServiceStack.Redis是一款功能豐富、操作簡單、高效能的C#/.NET客戶端庫,對原生的功能和特性提供很好的支援,同時又做了更高階的功能抽象,使得對簡單物件或複雜型別序列化操作更容易。當然也同時提供了同步和非同步API。

下面我們寫個簡單的使用小例子:

public static void Run()
{
    Console.WriteLine($"ServiceStack.Redis 使用示例");
    //建立連線池
    var pool = new RedisManagerPool("127.0.0.1:6379");
    //獲取一個redis例項
    using var redis = pool.GetClient();
    //設定鍵值對
    var setResult = redis.Set("key1", "value1");
    Console.WriteLine($"設定鍵值對key1/value1操作結果:{setResult}");
    //獲取鍵對應的值
    var value = redis.Get<string>("key1");
    Console.WriteLine($"獲取鍵key1對應的值為:{value}");
    // 刪除鍵
    var delResult = redis.Remove("key1");
    Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
    //檢查鍵是否存在
    var exists = redis.ContainsKey("key1");
    Console.WriteLine($"鍵key1是否存在: {exists}");
}

執行結果如下:

02、StackExchange.Redis

StackExchange.Redis是一款基於.NET的、高效能的、免費的、功能全面的、通用的老牌Redis客戶端。並且支援Redis多節點,Redis叢集,IO多路複用,同步/非同步雙程式設計模型等技術,這也使得其與Redis互動同時兼具靈活性與高效性,大大提升了Redis讀寫的效能與併發。

同時它還提供了豐富的高階功能,包括但不限於管道,連線池,事務,Lua指令碼、訂閱/釋出等。序列化與壓縮也提供了多種方式供以選擇,很方便與.NET應用程式整合。

下面我們寫個簡單的使用小例子:

public static void Run()
{
    Console.WriteLine($"StackExchange.Redis 使用示例");
    // 建立 ConnectionMultiplexer 例項
    using var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");
    //獲取 Redis 資料庫例項
    var redis = connection.GetDatabase();
    //設定鍵值對
    var setResult = redis.StringSet("key1", "value1");
    Console.WriteLine($"設定鍵值對key1/value1操作結果:{setResult}");
    //獲取鍵對應的值
    var value = redis.StringGet("key1");
    Console.WriteLine($"獲取鍵key1對應的值為:{value}");
    // 刪除鍵
    var delResult = redis.KeyDelete("key1");
    Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
    //檢查鍵是否存在
    var exists = redis.KeyExists("key1");
    Console.WriteLine($"鍵key1是否存在: {exists}");
}

執行結果如下:

03、CSRedisCore

CSRedisCore是一款國人基於開源專案csredis上實現的著名Redis C#/.NET客戶端庫。它做到了所有方法名和redis-cli方法名保持一致。它支援Redis 叢集、Redis 哨兵和Redis主從分離,以及geo型別、流型別命令,同時支援同步/非同步介面。

下面我們寫個簡單的使用小例子:

public static void Run()
{
    Console.WriteLine($"CSRedisRedis 使用示例");
    // 建立 CSRedisClient 例項
    var redis = new CSRedisClient("127.0.0.1:6379");
    //設定鍵值對
    var setResult = redis.Set("key1", "value1");
    Console.WriteLine($"設定鍵值對key1/value1操作結果:{setResult}");
    //獲取鍵對應的值
    var value = redis.Get("key1");
    Console.WriteLine($"獲取鍵key1對應的值為:{value}");
    // 刪除鍵
    var delResult = redis.Del("key1");
    Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
    //檢查鍵是否存在
    var exists = redis.Exists("key1");
    Console.WriteLine($"鍵key1是否存在: {exists}");
}

執行結果如下:

04、FreeRedis

FreeRedis是CSRedisCore作者的另一個大作。至少從邏輯上來說也應該比CSRedisCore更優秀,事實也是如此,FreeRedis在記憶體使用、儲存效率都做了最佳化,在持久化、容錯方面也做了改進,同時還提供了更多的高階功能以及自定義選項。我們直接看官方介紹。

單從介紹上來說CSRedisCore有的功能它有,CSRedisCore沒有的功能它也有。總的來說功能更強大了。另外CSRedisCore目前處於維護階段已經不新增功能了。因此更推薦FreeRedis。

下面我們寫個簡單的使用小例子:

public static void Run()
{
    Console.WriteLine($"FreeRedis 使用示例");
    // 建立 CSRedisClient 例項
    var redis = new RedisClient("127.0.0.1:6379");
    //設定鍵值對
    redis.Set("key1", "value1");
    Console.WriteLine($"設定鍵值對key1/value1操作成功");
    //獲取鍵對應的值
    var value = redis.Get("key1");
    Console.WriteLine($"獲取鍵key1對應的值為:{value}");
    // 刪除鍵
    var delResult = redis.Del("key1");
    Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
    //檢查鍵是否存在
    var exists = redis.Exists("key1");
    Console.WriteLine($"鍵key1是否存在: {exists}");
}

執行結果如下:

05、NewLife.Redis

NewLife.Redis具有低延時,高效能,高吞吐量以及穩定性、可靠性良好,因此在大量實時資料計算的應用場景有很好的發揮。它為針對大資料和訊息佇列做了最佳化,使得其可以用支撐日均百億級的呼叫量,而它的連線池可以做到100000個連線併發。在包含網路通訊的前提下可以把get/set操作做到平均耗時200~600微秒。其二進位制序列化方式也更有助於提升資料儲存和讀取效率。

下面我們寫個簡單的使用小例子:

public static void Run()
{
    Console.WriteLine($"NewLife.Redis 使用示例");
    // 建立 CSRedisClient 例項
    var redis =  new FullRedis("127.0.0.1:6379", "", 0);
    //設定鍵值對
    var setResult = redis.Set("key1", "value1");
    Console.WriteLine($"設定鍵值對key1/value1操作結果:{setResult}");
    //獲取鍵對應的值
    var value = redis.Get<string>("key1");
    Console.WriteLine($"獲取鍵key1對應的值為:{value}");
    // 刪除鍵
    var delResult = redis.Remove("key1");
    Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
    //檢查鍵是否存在
    var exists = redis.ContainsKey("key1");
    Console.WriteLine($"鍵key1是否存在: {exists}");
}

執行結果如下:

06、BeetleX.Redis。

BeetleX.Redis是一款高可用、高效能、非同步非阻塞設計的.net core客戶端庫。並且基本全面覆蓋redis-cli指令,提供了多種序列化方式,使用簡單輕鬆。

下面我們寫個簡單的使用小例子:

public static async Task RunAsync()
{
    Console.WriteLine($"BeetleX.Redis 使用示例");
    // 建立 CSRedisClient 例項
    RedisDB redis = new RedisDB(0)
    {
        DataFormater = new JsonFormater()
    };
    //新增寫主機
    redis.Host.AddWriteHost("127.0.0.1", 6379);
    //新增讀主機
    redis.Host.AddReadHost("127.0.0.1", 6379);
    //設定鍵值對
    var setResult = await redis.Set("key1", "value1");
    Console.WriteLine($"設定鍵值對key1/value1操作結果:{setResult}");
    //獲取鍵對應的值
    var value = await redis.Get<string>("key1");
    Console.WriteLine($"獲取鍵key1對應的值為:{value}");
    // 刪除鍵
    var delResult = await redis.Del("key1");
    Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
    //檢查鍵是否存在
    var exists = await redis.Exists("key1");
    Console.WriteLine($"鍵key1是否存在: {exists}");
}

執行結果如下:

07、總結

  • ServiceStack.Redis:綜合功能全面,適合需要商業支援的使用者。

  • StackExchange.Redis:官方推薦,功能全面,社群支援良好,文件豐富。

  • CSRedisCore:功能齊全,簡單易用,適合快速開發。

  • FreeRedis:高效能,功能齊全,簡單易用,適合快速開發。

  • NewLife.Redis:高效能,高併發,低延遲,分散式場景適合使用。

  • BeetleX.Redis。:高可用,高效能,非同步操作,適合高負載場景。

:測試方法程式碼以及示例原始碼都已經上傳至程式碼庫,有興趣的可以看看。https://gitee.com/hugogoos/Planner

相關文章