經過前面的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